#include <bits/stdc++.h>
using namespace std;
long long fast_pow(long long x, long long y, long long p);
string l, r;
long long m, d;
long long n;
long long dp[2001][2001][2][2][2];
long long rec(long long pos, long long md, long long tl, long long tr,
              long long cnt) {
  if (pos == n) {
    return md == 0;
  }
  if (dp[pos][md][tl][tr][cnt] != -1) {
    return dp[pos][md][tl][tr][cnt];
  }
  long long ans = 0;
  long long st = 0, end = 9;
  if (tl) {
    if (l[pos] == 'a')
      st = 0;
    else
      st = l[pos] - '0';
  }
  if (tr) end = r[pos] - '0';
  if (cnt) {
    if (d >= st && d <= end) {
      long long temp = (((md % m) * (10 % m)) + d) % m;
      long long templ = tl & (d == st);
      long long tempr = tr & (d == end);
      ans += rec(pos + 1, temp, templ, tempr, (cnt + 1) % 2);
      ans %= 1000000007;
    }
  } else {
    for (long long i = st; i <= end; i++) {
      long long templ = tl & (i == st);
      long long tempr = tr & (i == end);
      long long temp = (((md % m) * (10 % m)) + i) % m;
      if (d != i) {
        if (i == st && l[pos] == 'a') {
          ans += rec(pos + 1, temp, templ, tempr, cnt);
        } else {
          ans += rec(pos + 1, temp, templ, tempr, (cnt + 1) % 2);
        }
        ans %= 1000000007;
      }
    }
  }
  return dp[pos][md][tl][tr][cnt] = ans;
}
void solve() {
  cin >> m >> d >> l >> r;
  reverse((l).begin(), (l).end());
  while (l.size() < r.size()) {
    l.push_back('a');
  }
  reverse((l).begin(), (l).end());
  n = r.size();
  memset(dp, -1, sizeof(dp));
  cout << rec(0, 0, 1, 1, 0) << "\n";
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long test = 1;
  for (long long i = 1; i <= test; i++) {
    solve();
  }
  return 0;
}
long long fast_pow(long long x, long long y, long long p) {
  long long res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
