#include <bits/stdc++.h>
using namespace std;
#define fastIO ios_base::sync_with_stdio(false), cin.tie(NULL);
#define FF first
#define SS second
#define eps 1e-9
#define PI aocs(-1.0)
// VECTOR (6)
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(), (x).end()
#define lb lower_bound
#define ub upper_bound
#define uniq(x) sort(all((x))), (x).resize(unique(all((x))) - (x).begin());
// BIT (6)
#define BIT(x, i) (((x)>>(i))&1)
#define MASK(i) (1LL<<(i))
#define CNTBIT(x) __builtin_popcountll(x)
#define ODDBIT(x) __builtin_parityll(x)
#define SUBSET(big, small) (((big)&(small))==(small))
#define FIRSTBIT(x) __builtin_ctzll(x)
//typedef
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<ll, int> ii;
/* */
template <class T>
bool minimize(T &a, const T &b) {
if(a > b) {a = b; return 1;}
return 0;
}
template <class T>
bool maximize(T &a, const T &b) {
if(a < b) {a = b; return 1;}
return 0;
}
/* */
/* CODE BELOW */
const int N = 1e5 + 7, M = 1e9 + 7;
const int MOD = 1e9 + 7;
const int oo = 1e9 + 7;
/* */
int add(int a, int b) {
a+= b; if(a>=MOD) a-=MOD;
return a;
}
void update(int &a, int b) {
a+= b; if(a>=MOD) a-=MOD;
}
/* */
vector<int> l, r, k;
int n, kmp[N];
int nxt[N][10];
vector<vector<int> > _dp[2][2];
int solve(const vector<int> &num, int tightness, int kExist, int idx, int suffixMatch) {
if(idx == sz(num)) return kExist;
int &ans = _dp[tightness][kExist][idx][suffixMatch];
if(ans != -1) return ans; ans = 0;
for(int i=0;i<10;i++) {
if(tightness && i > num[idx]) break;
update(ans, solve(num, (num[idx] == i)&tightness, kExist | (nxt[suffixMatch][i] == n), idx+1, nxt[suffixMatch][i]%n));
}
//update(ans, kExist);
//cout<<tightness<<" "<<kExist<<" "<<idx<<" "<<suffixMatch<<" = "<<ans<<"\n";
return ans;
}
signed main() {
//freopen("test.inp", "r", stdin);
//freopen("test.out", "w", stdout);
fastIO;
string _l, _r, _k;
cin>>_l>>_r>>_k; n = sz(_k);
for(char c:_l) l.pb(c-'0');
for(char c:_r) r.pb(c-'0');
for(char c:_k) k.pb(c-'0');
for(int i=sz(l)-1;i>=0;i--) {
l[i]--; if(l[i] >= 0) break;
l[i] = 9;
}
for(int j, i=1;i<n;i++) {
j = kmp[i-1];
while(j > 0 && k[i] != k[j]) j = kmp[j-1];
if(k[i] == k[j]) j++; kmp[i] = j;
}
for(int i=0;i<n;i++) {
for(int j=0;j<10;j++) {
if(k[i] == j) nxt[i][j] = i + 1;
else if (i > 0) nxt[i][j] = nxt[kmp[i-1]][j];
}
}
for(int i=0;i<2;i++) {
for(int j=0;j<2;j++) {
_dp[i][j].resize(sz(r));
for(int l=0;l<sz(r);l++) {
_dp[i][j][l].assign(min(l, n)+1, -1);
}
}
}
int ansL = solve(l, 1, 0, 0, 0);
for(int i=0;i<2;i++) {
for(int j=0;j<2;j++) {
for(int l=0;l<sz(r);l++) {
_dp[i][j][l].assign(min(l, n)+1, -1);
}
}
}
int ansR = solve(r, 1, 0, 0, 0);
cout<<add(ansR, MOD - ansL);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmFzdElPIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKE5VTEwpOwojZGVmaW5lIEZGIGZpcnN0CiNkZWZpbmUgU1Mgc2Vjb25kCiNkZWZpbmUgZXBzIDFlLTkKI2RlZmluZSBQSSBhb2NzKC0xLjApCi8vIFZFQ1RPUiAoNikKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBzeih4KSAoaW50KXguc2l6ZSgpCiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgdW5pcSh4KSBzb3J0KGFsbCgoeCkpKSwgKHgpLnJlc2l6ZSh1bmlxdWUoYWxsKCh4KSkpIC0gKHgpLmJlZ2luKCkpOwovLyBCSVQgKDYpCiNkZWZpbmUgQklUKHgsIGkpICgoKHgpPj4oaSkpJjEpCiNkZWZpbmUgTUFTSyhpKSAoMUxMPDwoaSkpCiNkZWZpbmUgQ05UQklUKHgpIF9fYnVpbHRpbl9wb3Bjb3VudGxsKHgpCiNkZWZpbmUgT0REQklUKHgpIF9fYnVpbHRpbl9wYXJpdHlsbCh4KQojZGVmaW5lIFNVQlNFVChiaWcsIHNtYWxsKSAoKChiaWcpJihzbWFsbCkpPT0oc21hbGwpKQojZGVmaW5lIEZJUlNUQklUKHgpIF9fYnVpbHRpbl9jdHpsbCh4KQovL3R5cGVkZWYKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVsbDsKdHlwZWRlZiBsb25nIGRvdWJsZSBsZDsKdHlwZWRlZiBwYWlyPGxsLCBpbnQ+IGlpOwoKLyogKi8KdGVtcGxhdGUgPGNsYXNzIFQ+CmJvb2wgbWluaW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgaWYoYSA+IGIpIHthID0gYjsgcmV0dXJuIDE7fQogICAgcmV0dXJuIDA7Cn0KdGVtcGxhdGUgPGNsYXNzIFQ+CmJvb2wgbWF4aW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgaWYoYSA8IGIpIHthID0gYjsgcmV0dXJuIDE7fQogICAgcmV0dXJuIDA7Cn0KLyogKi8KCi8qIENPREUgQkVMT1cgKi8KY29uc3QgaW50IE4gPSAxZTUgKyA3LCBNID0gMWU5ICsgNzsKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBvbyA9IDFlOSArIDc7CgovKiAqLwoKaW50IGFkZChpbnQgYSwgaW50IGIpIHsKICAgIGErPSBiOyBpZihhPj1NT0QpIGEtPU1PRDsKICAgIHJldHVybiBhOwp9CnZvaWQgdXBkYXRlKGludCAmYSwgaW50IGIpIHsKICAgIGErPSBiOyBpZihhPj1NT0QpIGEtPU1PRDsKfQoKLyogKi8KCnZlY3RvcjxpbnQ+IGwsIHIsIGs7CmludCBuLCBrbXBbTl07CmludCBueHRbTl1bMTBdOwp2ZWN0b3I8dmVjdG9yPGludD4gPiBfZHBbMl1bMl07CgppbnQgc29sdmUoY29uc3QgdmVjdG9yPGludD4gJm51bSwgaW50IHRpZ2h0bmVzcywgaW50IGtFeGlzdCwgaW50IGlkeCwgaW50IHN1ZmZpeE1hdGNoKSB7CiAgICBpZihpZHggPT0gc3oobnVtKSkgcmV0dXJuIGtFeGlzdDsKICAgIGludCAmYW5zID0gX2RwW3RpZ2h0bmVzc11ba0V4aXN0XVtpZHhdW3N1ZmZpeE1hdGNoXTsKICAgIGlmKGFucyAhPSAtMSkgcmV0dXJuIGFuczsgYW5zID0gMDsKCiAgICBmb3IoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgIGlmKHRpZ2h0bmVzcyAmJiBpID4gbnVtW2lkeF0pIGJyZWFrOwogICAgICAgIHVwZGF0ZShhbnMsIHNvbHZlKG51bSwgKG51bVtpZHhdID09IGkpJnRpZ2h0bmVzcywga0V4aXN0IHwgKG54dFtzdWZmaXhNYXRjaF1baV0gPT0gbiksIGlkeCsxLCBueHRbc3VmZml4TWF0Y2hdW2ldJW4pKTsKICAgIH0KICAgIC8vdXBkYXRlKGFucywga0V4aXN0KTsKCiAgICAvL2NvdXQ8PHRpZ2h0bmVzczw8IiAiPDxrRXhpc3Q8PCIgIjw8aWR4PDwiICI8PHN1ZmZpeE1hdGNoPDwiID0gIjw8YW5zPDwiXG4iOwogICAgcmV0dXJuIGFuczsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICAvL2ZyZW9wZW4oInRlc3QuaW5wIiwgInIiLCBzdGRpbik7CiAgICAvL2ZyZW9wZW4oInRlc3Qub3V0IiwgInciLCBzdGRvdXQpOwogICAgZmFzdElPOwogICAgc3RyaW5nIF9sLCBfciwgX2s7CiAgICBjaW4+Pl9sPj5fcj4+X2s7IG4gPSBzeihfayk7CiAgICBmb3IoY2hhciBjOl9sKSBsLnBiKGMtJzAnKTsKICAgIGZvcihjaGFyIGM6X3IpIHIucGIoYy0nMCcpOwogICAgZm9yKGNoYXIgYzpfaykgay5wYihjLScwJyk7CgoKICAgIGZvcihpbnQgaT1zeihsKS0xO2k+PTA7aS0tKSB7CiAgICAgICAgbFtpXS0tOyBpZihsW2ldID49IDApIGJyZWFrOwogICAgICAgIGxbaV0gPSA5OwogICAgfQoKICAgIGZvcihpbnQgaiwgaT0xO2k8bjtpKyspIHsKICAgICAgICBqID0ga21wW2ktMV07CiAgICAgICAgd2hpbGUoaiA+IDAgJiYga1tpXSAhPSBrW2pdKSBqID0ga21wW2otMV07CiAgICAgICAgaWYoa1tpXSA9PSBrW2pdKSBqKys7IGttcFtpXSA9IGo7CiAgICB9CgogICAgZm9yKGludCBpPTA7aTxuO2krKykgewogICAgICAgIGZvcihpbnQgaj0wO2o8MTA7aisrKSB7CiAgICAgICAgICAgIGlmKGtbaV0gPT0gaikgbnh0W2ldW2pdID0gaSArIDE7CiAgICAgICAgICAgIGVsc2UgaWYgKGkgPiAwKSBueHRbaV1bal0gPSBueHRba21wW2ktMV1dW2pdOwogICAgICAgIH0KICAgIH0KICAgIAogICAgZm9yKGludCBpPTA7aTwyO2krKykgewogICAgICAgIGZvcihpbnQgaj0wO2o8MjtqKyspIHsKICAgICAgICAgICAgX2RwW2ldW2pdLnJlc2l6ZShzeihyKSk7CiAgICAgICAgICAgIGZvcihpbnQgbD0wO2w8c3oocik7bCsrKSB7CiAgICAgICAgICAgICAgICBfZHBbaV1bal1bbF0uYXNzaWduKG1pbihsLCBuKSsxLCAtMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpbnQgYW5zTCA9IHNvbHZlKGwsIDEsIDAsIDAsIDApOwogICAgCiAgICBmb3IoaW50IGk9MDtpPDI7aSsrKSB7CiAgICAgICAgZm9yKGludCBqPTA7ajwyO2orKykgewogICAgICAgICAgICBmb3IoaW50IGw9MDtsPHN6KHIpO2wrKykgewogICAgICAgICAgICAgICAgX2RwW2ldW2pdW2xdLmFzc2lnbihtaW4obCwgbikrMSwgLTEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaW50IGFuc1IgPSBzb2x2ZShyLCAxLCAwLCAwLCAwKTsKCiAgICBjb3V0PDxhZGQoYW5zUiwgTU9EIC0gYW5zTCk7CgogICAgcmV0dXJuIDA7Cn0=