#include<bits/stdc++.h>

using namespace std;



vector<int> Z(string s) {
    int n = s.size();
    vector<int> z(n, 0);
    for (int i = 1, l = 0, r = 0; i < n; ++i) {
        if (i <= r) z[i] = min(r - i + 1, z[i - l]);
        while (i + z[i] < n && s[z[i]] == s[i + z[i]]) ++z[i];
        if (i + z[i] - 1 > r) r = i + z[i] - 1, l = i;
    }
    return z;
}

const long long mod = 998244353;
string a, l, r;

bool isaGreaterThan(int l, int r, string &b, vector<int> &zb) {
    // return a[l..r] > b
    if (r < l) return false;
    
    int len_b = b.size();
    if (r - l + 1 < len_b) return false;
    if (r - l + 1 > len_b) return true;
    
    int len = zb[len_b + l + 1];
    if (len >= len_b) return false;
    return a[l + len] > b[len];
}

bool isaEqual(int l, int r, string &b, vector<int> &zb) {
    // return a[l..r] == b
    if (r < l) return false;
    int len_b = b.size();
    if (r - l + 1 != len_b) return false;
    int len = zb[len_b + l + 1];
    return (len >= len_b);
}

void solve() {
    cin >> a >> l >> r;

    vector<int> zl = Z(l + "#" + a);
    vector<int> zr = Z(r + "#" + a);

    int n = a.size();
    vector<long long> f(n + 5, 0), sum_suffix(n + 5, 0);
    f[n] = sum_suffix[n] = 1;
    int u = n, v = n - 1;
    for (int i = n - 1; i >= 0; --i) {
        if (a[i] == '0') {
            f[i] = f[i + 1] * (l == "0");
        }
        else {
            while (isaGreaterThan(i, u - 1, l, zl) || isaEqual(i, u - 1, l, zl)) --u;
            while (isaGreaterThan(i, v, r, zr)) --v;
            f[i] = (sum_suffix[u + 1] - sum_suffix[v + 2] + mod) % mod;
        }
        sum_suffix[i] = (sum_suffix[i + 1] + f[i]) % mod;
    }
    cout << f[0];
}

int main() {
    solve();
    return 0;
}