#include <bits/stdc++.h>
using namespace std;
long long m;
string a, b;
long long dp[501][10][2][2][500];
long long d[501];
long long solve(string s) {
  long long T = 1;
  long long L = s.size();
  if (L == 1) return (s[0] - '0') / m;
  for (long long i = 1; i <= L; i++) {
    d[L - i] = T;
    T = (T * 10) % m;
  }
  memset(dp, 0, sizeof(dp));
  for (long long i = 0; i < 2; i++) {
    for (long long j = 1; j < s[0] - '0'; j++) {
      dp[0][j][i][1][j * d[0] % m] = 1;
    }
    dp[0][s[0] - '0'][i][0][d[0] * (s[0] - '0') % m] = 1;
  }
  for (long long i = 1; i < L; i++) {
    for (long long j = 1; j < 10; j++) {
      dp[i][j][0][1][j * d[i] % m] = dp[i][j][1][1][j * d[i] % m] = 1;
    }
  }
  for (long long i = 0; i < L - 1; i++) {
    for (long long j = 0; j < 2; j++) {
      for (long long w = 0; w < 2; w++) {
        for (long long k = 0; k < 10; k++) {
          for (long long p = 0; p < m; p++) {
            if (j) {
              if (w) {
                for (long long next = 0; next < k; next++) {
                  dp[i + 1][next][0][1][(p + d[i + 1] * next) % m] =
                      (dp[i + 1][next][0][1][(p + d[i + 1] * next) % m] +
                       dp[i][k][1][1][p]) %
                      10000;
                }
              } else {
                for (long long next = 0; next < s[i + 1] - '0' && next < k;
                     next++) {
                  dp[i + 1][next][0][1][(p + d[i + 1] * next) % m] =
                      (dp[i + 1][next][0][1][(p + d[i + 1] * next) % m] +
                       dp[i][k][1][0][p]) %
                      10000;
                }
                if (s[i + 1] < s[i] && s[i + 1] - '0' < k)
                  dp[i + 1][s[i + 1] - '0'][0][0]
                    [(p + d[i + 1] * (s[i + 1] - '0')) % m] =
                        (dp[i + 1][s[i + 1] - '0'][0][0]
                           [(p + d[i + 1] * (s[i + 1] - '0')) % m] +
                         dp[i][k][1][0][p]) %
                        10000;
              }
            } else {
              if (w) {
                for (long long next = k + 1; next < 10; next++) {
                  dp[i + 1][next][1][1][(p + d[i + 1] * next) % m] =
                      (dp[i + 1][next][1][1][(p + d[i + 1] * next) % m] +
                       dp[i][k][0][1][p]) %
                      10000;
                }
              } else {
                for (long long next = k + 1; next < s[i + 1] - '0'; next++) {
                  dp[i + 1][next][1][1][(p + d[i + 1] * next) % m] =
                      (dp[i + 1][next][1][1][(p + d[i + 1] * next) % m] +
                       dp[i][k][0][0][p]) %
                      10000;
                }
                if (s[i + 1] > s[i])
                  dp[i + 1][s[i + 1] - '0'][1][0]
                    [(p + d[i + 1] * (s[i + 1] - '0')) % m] =
                        (dp[i + 1][s[i + 1] - '0'][1][0]
                           [(p + d[i + 1] * (s[i + 1] - '0')) % m] +
                         dp[i][k][0][0][p]) %
                        10000;
              }
            }
          }
        }
      }
    }
  }
  long long sum = 0;
  for (long long i = 0; i < 10; i++)
    for (long long j = 0; j < 2; j++)
      for (long long k = 0; k < 2; k++)
        sum = (sum + dp[L - 1][i][j][k][0]) % 10000;
  return sum - 9 / m;
}
int main() {
  cin >> a >> b >> m;
  if (a == "1")
    printf("%lld\n", solve(b));
  else {
    long long k = a.size() - 1;
    while (a[k] == '0') {
      a[k] = '9';
      k--;
    }
    if (k == 0 && a[k] == '1') {
      string t;
      for (long long i = 1; i < a.size(); i++) t += "9";
      a = t;
    } else {
      a[k] = a[k] - 1;
    }
    printf("%lld\n", solve(b) - solve(a));
  }
}
