#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"; 

}