#include <iostream>
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
string a,b;
int m, d;
ll M = 1e9 + 7;
const int N = 2e3 + 5;
ll dp[N][N][2][2];
ll solve(int i, int sum, int nz, int pos, int ucan, int lcan ){
if(i < 0 && sum == 0) return 1ll;
else if(i < 0) return 0ll;
if(~dp[i][sum][nz][pos] && ucan && lcan) return dp[i][sum][nz][pos];
int ub = b[m - 1 - i] - '0';
int lb = a[m - 1 - i] - '0';
cout<<ub<<" "<<lb<<endl;
int kub = (ucan)? 9: ub; int klb = (lcan)?0:lb;
cout<<"& we have: "<<kub<<" "<<klb<<endl;
ll ans = 0ll;
for(int dig = klb; dig <= kub; dig++){
int zer = (nz && (dig == 0));
int ns = (sum*10 + dig)%m;
cout<<dig<<" -> "<<ns<<endl;
if(zer) ans = (ans + solve(i - 1,ns, zer, pos, ucan||(dig < ub), lcan||(dig>lb)) )%M;
else{
if(pos && dig != d)
ans = (ans + solve(i-1,ns,zer,pos^1,ucan||(dig < ub), lcan||(dig>lb)))%M;
else if(!pos && dig == d)
ans = (ans + solve(i-1,ns,zer,pos^1,ucan||(dig < ub), lcan||(dig>lb)))%M;
}
}
if(ucan && lcan) return dp[i][sum][nz][pos]= ans;
else return ans;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
memset(dp, - 1, sizeof(dp));
cin>>m>>d;
cin>>a>>b;
cout<<solve(m - 1, 0,1,1,0,0)<<"\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4gCnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RyaW5nIGEsYjsgCmludCBtLCBkOyAKbGwgTSA9IDFlOSArIDc7IApjb25zdCBpbnQgTiA9IDJlMyArIDU7IAoKbGwgZHBbTl1bTl1bMl1bMl07IAoKbGwgc29sdmUoaW50IGksIGludCBzdW0sIGludCBueiwgaW50IHBvcywgaW50IHVjYW4sIGludCBsY2FuICl7CgogICAgIGlmKGkgPCAwICYmIHN1bSA9PSAwKSByZXR1cm4gMWxsOyAKICAgICBlbHNlIGlmKGkgPCAwKSByZXR1cm4gMGxsOyAKCiAgICAgaWYofmRwW2ldW3N1bV1bbnpdW3Bvc10gJiYgdWNhbiAmJiBsY2FuKSByZXR1cm4gZHBbaV1bc3VtXVtuel1bcG9zXTsgCgogICAgIGludCB1YiA9IGJbbSAtIDEgLSBpXSAtICcwJzsgCiAgICAgaW50IGxiICA9IGFbbSAtIDEgLSBpXSAtICcwJzsgCiAgICAgY291dDw8dWI8PCIgIjw8bGI8PGVuZGw7IAogICAgIGludCBrdWIgPSAodWNhbik/IDk6IHViOyBpbnQga2xiID0gKGxjYW4pPzA6bGI7IAogICAgY291dDw8IiYgd2UgaGF2ZTogIjw8a3ViPDwiICI8PGtsYjw8ZW5kbDsKICAgICBsbCBhbnMgPSAwbGw7IAoKICAgIGZvcihpbnQgZGlnID0ga2xiOyBkaWcgPD0ga3ViOyBkaWcrKyl7CiAgICAgICAgaW50IHplciA9IChueiAmJiAoZGlnID09IDApKTsgCiAgICAgICAgaW50IG5zID0gKHN1bSoxMCArIGRpZyklbTsgCiAgICAgICAgIGNvdXQ8PGRpZzw8IiAtPiAiPDxuczw8ZW5kbDsKICAgICAgICBpZih6ZXIpIGFucyA9IChhbnMgKyBzb2x2ZShpIC0gMSxucywgemVyLCBwb3MsIHVjYW58fChkaWcgPCB1YiksIGxjYW58fChkaWc+bGIpKSApJU07IAogICAgICAgIGVsc2V7CiAgICAgICAgICAgICBpZihwb3MgJiYgZGlnICE9IGQpCiAgICAgIGFucyA9IChhbnMgKyBzb2x2ZShpLTEsbnMsemVyLHBvc14xLHVjYW58fChkaWcgPCB1YiksIGxjYW58fChkaWc+bGIpKSklTTsgCiAgICAgICAgICAgICBlbHNlIGlmKCFwb3MgJiYgZGlnID09IGQpIAphbnMgPSAoYW5zICsgc29sdmUoaS0xLG5zLHplcixwb3NeMSx1Y2FufHwoZGlnIDwgdWIpLCBsY2FufHwoZGlnPmxiKSkpJU07IAogICAgICAgICB9CiAgICB9CiAgICBpZih1Y2FuICYmIGxjYW4pIHJldHVybiBkcFtpXVtzdW1dW256XVtwb3NdPSBhbnM7IAogICAgZWxzZSByZXR1cm4gYW5zOyAKfQoKaW50IG1haW4oKSB7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCiAgICBjaW4udGllKE5VTEwpOyBjb3V0LnRpZShOVUxMKTsgCiAgICBtZW1zZXQoZHAsIC0gMSwgc2l6ZW9mKGRwKSk7IAogICAgY2luPj5tPj5kOyAKICAgIGNpbj4+YT4+YjsgCiAgIGNvdXQ8PHNvbHZlKG0gLSAxLCAwLDEsMSwwLDApPDwiXG4iOyAKCn0=