#include <bits/stdc++.h>
using namespace std;
int mod, d;
string l, r;
const int MOD = 1000 * 1000 * 1000 + 7;
void add(long long &a, long long b) {
  if (a + b < MOD)
    a += b;
  else
    a = a + b - MOD;
}
void del(long long &a, long long b) {
  if (a - b < 0)
    a = a + MOD - b;
  else
    a -= b;
}
long long dp[2002][2001][2];
int solve(string s) {
  int n = s.length();
  for (int i = 0; i < 2001; i++)
    for (int j = 0; j < 2000; j++)
      for (int k = 0; k < 2; k++) dp[i][j][k] = 0;
  dp[0][0][1] = 1;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < mod; j++)
      for (int k = 0; k < 2; k++)
        for (int p = 0; p <= (k ? s[i] - '0' : 9); p++) {
          if (i % 2 == 1 && p != d) continue;
          if (i % 2 == 0 && p == d) continue;
          if (i == 0 && p == 0) continue;
          int j1 = (j * 10 + p) % mod, k1 = k && (s[i] - '0' == p);
          add(dp[i + 1][j1][k1], dp[i][j][k]);
        }
  long long ans(0);
  add(ans, dp[n][0][0]);
  add(ans, dp[n][0][1]);
  return ans;
}
bool beaty(string s) {
  int n = s.length();
  long long ans(0);
  for (int i = 0; i < n; i++) {
    if (i % 2) {
      if (s[i] - '0' != d) return 0;
    } else if (s[i] - '0' == d)
      return 0;
    ans = (ans * 10 + s[i] - '0') % mod;
  }
  return ans == 0;
}
int main() {
  cin >> mod >> d >> l >> r;
  long long ans(0);
  add(ans, solve(r));
  del(ans, solve(l));
  add(ans, int(beaty(l)));
  cout << ans;
}
