#include <bits/stdc++.h>
using namespace std;
int mem[1 << 12][20][2][2], mem1[1 << 12][20][2][2], k;
long long mod = 998244353, pwr[20];
vector<long long> a;
long long dp(int x, int msk, int l, int nm, bool f) {
  if (x == a.size()) {
    mem1[msk][x][l][f] = 0;
    return nm <= k;
  }
  if (nm > k) {
    mem1[msk][x][l][f] = 0;
    return 0;
  }
  if (mem[msk][x][l][f] != -1) {
    return mem[msk][x][l][f];
  }
  long long res = 0, tmp, ans1 = 0, tmp1;
  if (l) {
    if (f) {
      tmp = dp(x + 1, msk, 0, nm, 1);
      tmp1 = mem1[msk][x + 1][0][1];
      ans1 += tmp1;
      res += tmp;
      res %= mod;
    } else {
      tmp = dp(x + 1, msk | (1ll << 0), a[x] == 0,
               nm + ((msk & (1ll << 0)) == 0), 0);
      tmp1 = mem1[msk | (1ll << 0)][x + 1][a[x] == 0][0];
      ans1 += tmp1;
      res += tmp;
      res %= mod;
    }
    for (long long i = 1; i < a[x]; ++i) {
      tmp = dp(x + 1, msk | (1ll << i), 0, nm + ((msk & (1ll << i)) == 0), 0);
      tmp1 = mem1[msk | (1ll << i)][x + 1][0][0];
      res += tmp;
      ans1 += i * (pwr[a.size() - x - 1] * tmp % mod) + tmp1;
      res %= mod;
      ans1 %= mod;
    }
    if (a[x] != 0) {
      tmp = dp(x + 1, msk | (1ll << a[x]), 1, nm + ((msk & (1ll << a[x])) == 0),
               0);
      tmp1 = mem1[msk | (1ll << a[x])][x + 1][1][0];
      res += tmp;
      ans1 += a[x] * (pwr[a.size() - x - 1] * tmp % mod) + tmp1;
      res %= mod;
      ans1 %= mod;
    }
  } else {
    if (f) {
      tmp = dp(x + 1, msk, 0, nm, 1);
      tmp1 = mem1[msk][x + 1][0][1];
      ans1 += tmp1;
      res += tmp;
      res %= mod;
    } else {
      tmp = dp(x + 1, msk | (1ll << 0), 0, nm + ((msk & (1ll << 0)) == 0), 0);
      tmp1 = mem1[msk | (1ll << 0)][x + 1][0][0];
      ans1 += tmp1;
      res += tmp;
      res %= mod;
    }
    for (long long i = 1; i < 10; ++i) {
      tmp = dp(x + 1, msk | (1ll << i), 0, nm + ((msk & (1ll << i)) == 0), 0);
      tmp1 = mem1[msk | (1ll << i)][x + 1][0][0];
      res += tmp;
      ans1 += i * (pwr[a.size() - x - 1] * tmp % mod) + tmp1;
      res %= mod;
      ans1 %= mod;
    }
  }
  res %= mod;
  mem[msk][x][l][f] = res;
  mem1[msk][x][l][f] = ans1;
  return res;
}
int main() {
  pwr[0] = 1;
  for (int i = 1; i < 20; ++i) {
    pwr[i] = (pwr[i - 1] * 10) % mod;
  }
  long long x, y;
  cin >> x >> y >> k;
  a.clear();
  for (int i = 19; i >= 0; --i) {
    a.push_back(y % 10);
    y /= 10;
    if (!y) break;
  }
  reverse(a.begin(), a.end());
  memset(mem, -1, sizeof mem);
  dp(0, 0, 1, 0, 1);
  long long ans1 = mem1[0][0][1][1];
  --x;
  if (x == 0) {
    cout << ans1 << endl;
    return 0;
  }
  a.clear();
  for (int i = 19; i >= 0; --i) {
    a.push_back(x % 10);
    x /= 10;
    if (!x) break;
  }
  reverse(a.begin(), a.end());
  memset(mem, -1, sizeof mem);
  memset(mem1, 0, sizeof mem1);
  dp(0, 0, 1, 0, 1);
  ans1 -= mem1[0][0][1][1];
  ans1 %= mod;
  if (ans1 < 0) ans1 += mod;
  cout << ans1 << endl;
  return 0;
}
