#include <bits/stdc++.h>
using namespace std;
const int N = 20;
const int mod = 998244353;
struct node {
  int sum, tot;
  node(){};
  node(int S, int T) {
    sum = S;
    tot = T;
  }
  bool check() { return ~sum && ~tot; }
} f[2][2][N][1 << 10];
int A[N], ret, pw[30], k;
int lowbit(int x) { return x & -x; }
int ccount(int x) {
  int cnt = 0;
  if (!x) return 0;
  while (x) {
    x ^= lowbit(x);
    cnt++;
  }
  return cnt;
}
node dfs(bool lim, bool zero, int pos, int st) {
  if (!pos) return node(0, 1);
  node& now = f[lim][zero][pos][st];
  if (now.check()) return now;
  now.sum = now.tot = 0;
  for (int i = 0; i <= (lim ? A[pos] : 9); i++) {
    if (ccount(zero && !i ? 0 : st | (1 << i)) <= k) {
      node nxt = dfs(lim && i == A[pos], zero && !i, pos - 1,
                     zero && !i ? 0 : st | (1 << i));
      now.sum =
          (now.sum + nxt.sum + 1ll * i * nxt.tot % mod * pw[pos - 1] % mod) %
          mod;
      now.tot = (now.tot + nxt.tot) % mod;
    }
  }
  f[lim][zero][pos][st] = now;
  return now;
}
int calc(long long x) {
  ret = 0;
  memset(f, -1, sizeof(f));
  while (x) {
    A[++ret] = x % 10;
    x /= 10;
  }
  return dfs(1, 1, ret, 0).sum;
}
int main() {
  pw[0] = 1;
  for (int i = 1; i <= 20; i++) pw[i] = 10ll * pw[i - 1] % mod;
  long long l, r;
  cin >> l >> r >> k;
  cout << (mod + calc(r) - calc(l - 1)) % mod;
}
