#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
int m,d,len;
string l,r;
int f[2003][2003];
int s[2003];
int dfs(int x,int num,bool flag){
if(!x)return (num==0);
if(!flag&&f[x][num]!=-1)return f[x][num];
int up=flag?s[x]:9,ans=0;
if((len-x+1)%2==1){
for(int i=0;i<=up;i++){
if(i==d)continue;
ans=(ans+dfs(x-1,(num*10+i)%m,flag&&i==up))%mod;
}
}else{
if(d<=up)ans=(ans+dfs(x-1,(num*10+d)%m,flag&&d==up))%mod;
}
if(!flag)f[x][num]=ans;
return ans;
}
signed main(){
cin>>m>>d>>l>>r;
int lenl=l.size();
for(int i=lenl-1;i>=0;i--){
if(l[i]!='0'){
l[i]--;
break;
}else l[i]='9';
}
if(l[0]=='0'&&lenl!=1){
string shi="";
for(int i=1;i<lenl;i++)shi+=l[i];
//cout<<shi<<endl;
l=shi;
}
//cout<<l;
int ansr,ansl;
len=r.size();
for(int i=0;i<len;i++)s[len-i]=r[i]-'0';
memset(f,-1,sizeof(f));
ansr=dfs(len,0,true);
//cout<<ansr<<endl;
len=l.size();
for(int i=0;i<len;i++)s[len-i]=l[i]-'0';
memset(f,-1,sizeof(f));
ansl=dfs(len,0,true);
//cout<<ansl<<endl;
cout<<(ansr-ansl+mod)%mod;
return 0;
}
额,这玩意要是d==0有问题,比如有一种数教:0000000000000000000000000000000000000000000000000000000000000000000000000000000009. 这一大堆0个很烦,有没有大佬想想办法。