#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a * b / gcd(a, b); }
long long powers[20];
long long l, r;
int k;
pair<long long, long long> dp[20][1026][11];
pair<long long, long long> solve(int digitsCnt, int msk, int maxVal,
                                 int onesCntInMsk, vector<int>& v) {
  if (digitsCnt == v.size()) {
    return {0, 1};
  }
  pair<long long, long long>& ret = dp[digitsCnt][msk][maxVal];
  if (~ret.first && ~ret.second) return ret;
  long long ansSum = 0, ansCnt = 0;
  for (int i = 0; i <= min(maxVal, 9); i++) {
    int newMask = ((msk == 0 && i == 0) ? 0 : ((1 << i) | msk));
    int newMaxVal = (i == maxVal ? v[digitsCnt + 1] : 10);
    int newCnt = onesCntInMsk + (newMask > msk);
    if (newCnt > k) continue;
    pair<long long, long long> nxt =
        solve(digitsCnt + 1, newMask, newMaxVal, newCnt, v);
    long long sum = nxt.first, cnt = nxt.second;
    ansSum =
        ((ansSum + ((i * powers[v.size() - digitsCnt - 1]) % MOD * cnt) % MOD) %
             MOD +
         sum) %
        MOD;
    ansCnt = (ansCnt + cnt) % MOD;
  }
  return ret = {ansSum, ansCnt};
}
long long getSum(long long v) {
  memset(dp, -1, sizeof(dp));
  vector<int> arr;
  while (v) {
    arr.push_back(v % 10);
    v /= 10;
  }
  if (arr.size() == 0) arr.push_back(0);
  reverse(arr.begin(), arr.end());
  pair<long long, long long> ret = solve(0, 0, arr[0], 0, arr);
  return ret.first;
}
void init() {
  powers[0] = 1;
  for (int i = 1; i < 19; i++) powers[i] = powers[i - 1] * 10;
}
int main() {
  init();
  cin >> l >> r >> k;
  cout << (getSum(r) - getSum(l - 1) + MOD) % MOD << endl;
  return 0;
}
