#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int MOD = 998244353;
void add(int& a, int b) {
(a += b) %= MOD;
}
vector<int> digit;
vector<int> getDigit(ll n) {
vector<int> ans;
for (; n > 0; n /= 10) ans.push_back(n % 10);
return ans;
}
int pow10[18];
// dp = {tổng các số, số lượng số}
// mask là tập hợp các chữ số đã xuất hiện
ii memo[18][2][2][1 << 10];
ii dp(int idx, bool leading, bool smaller, int mask, int k) {
if (idx == -1) return {0, 1};
ii& ans = memo[idx][leading][smaller][mask];
if (ans.first != -1) return ans;
ans = {0, 0};
int max_digit = (smaller) ? 9 : digit[idx];
for (int i = 0; i <= max_digit; i++) {
bool new_leading = leading & (i == 0);
int next_mask = (new_leading) ? mask : (mask | (1 << i));
if (__builtin_popcount(next_mask) > k) continue;
ii next_ans = dp(idx - 1, new_leading, smaller | (i < digit[idx]), next_mask, k);
add(ans.first, next_ans.first);
add(ans.first, 1ll * pow10[idx] * i % MOD * next_ans.second % MOD);
add(ans.second, next_ans.second);
}
return ans;
}
int solve(ll n, int k) {
digit = getDigit(n);
memset(memo, -1, sizeof memo);
return dp(digit.size() - 1, 1, 0, 0, k).first;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll l, r; int k;
cin >> l >> r >> k;
pow10[0] = 1;
for (int i = 1; i <= 17; i++) pow10[i] = 1ll * pow10[i - 1] * 10 % MOD;
int ans = solve(r, k) - solve(l - 1, k);
if (ans < 0) ans += MOD;
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE1PRCA9IDk5ODI0NDM1MzsgCgp2b2lkIGFkZChpbnQmIGEsIGludCBiKSB7CgkoYSArPSBiKSAlPSBNT0Q7IAp9Cgp2ZWN0b3I8aW50PiBkaWdpdDsgCgp2ZWN0b3I8aW50PiBnZXREaWdpdChsbCBuKSB7Cgl2ZWN0b3I8aW50PiBhbnM7IAoJZm9yICg7IG4gPiAwOyBuIC89IDEwKSBhbnMucHVzaF9iYWNrKG4gJSAxMCk7IAoJcmV0dXJuIGFuczsgCn0KCmludCBwb3cxMFsxOF07IAoKLy8gZHAgPSB7dOG7lW5nIGPDoWMgc+G7kSwgc+G7kSBsxrDhu6NuZyBz4buRfQovLyBtYXNrIGzDoCB04bqtcCBo4bujcCBjw6FjIGNo4buvIHPhu5EgxJHDoyB4deG6pXQgaGnhu4duCmlpIG1lbW9bMThdWzJdWzJdWzEgPDwgMTBdOyAgCgppaSBkcChpbnQgaWR4LCBib29sIGxlYWRpbmcsIGJvb2wgc21hbGxlciwgaW50IG1hc2ssIGludCBrKSB7CglpZiAoaWR4ID09IC0xKSByZXR1cm4gezAsIDF9OyAgIAoJCglpaSYgYW5zID0gbWVtb1tpZHhdW2xlYWRpbmddW3NtYWxsZXJdW21hc2tdOwoJaWYgKGFucy5maXJzdCAhPSAtMSkgcmV0dXJuIGFuczsgCgoJYW5zID0gezAsIDB9OyAgCglpbnQgbWF4X2RpZ2l0ID0gKHNtYWxsZXIpID8gOSA6IGRpZ2l0W2lkeF07IAoJZm9yIChpbnQgaSA9IDA7IGkgPD0gbWF4X2RpZ2l0OyBpKyspIHsKCQlib29sIG5ld19sZWFkaW5nID0gbGVhZGluZyAmIChpID09IDApOyAKCQlpbnQgbmV4dF9tYXNrID0gKG5ld19sZWFkaW5nKSA/IG1hc2sgOiAobWFzayB8ICgxIDw8IGkpKTsgIAoJCQoJCWlmIChfX2J1aWx0aW5fcG9wY291bnQobmV4dF9tYXNrKSA+IGspIGNvbnRpbnVlOyAKCQkKCQlpaSBuZXh0X2FucyA9IGRwKGlkeCAtIDEsIG5ld19sZWFkaW5nLCBzbWFsbGVyIHwgKGkgPCBkaWdpdFtpZHhdKSwgbmV4dF9tYXNrLCBrKTsgCgkJYWRkKGFucy5maXJzdCwgbmV4dF9hbnMuZmlyc3QpOwoJCWFkZChhbnMuZmlyc3QsIDFsbCAqIHBvdzEwW2lkeF0gKiBpICUgTU9EICogbmV4dF9hbnMuc2Vjb25kICUgTU9EKTsgICAKCQlhZGQoYW5zLnNlY29uZCwgbmV4dF9hbnMuc2Vjb25kKTsgCgl9CgoJcmV0dXJuIGFuczsgCn0KCmludCBzb2x2ZShsbCBuLCBpbnQgaykgewoJZGlnaXQgPSBnZXREaWdpdChuKTsgCgltZW1zZXQobWVtbywgLTEsIHNpemVvZiBtZW1vKTsgCglyZXR1cm4gZHAoZGlnaXQuc2l6ZSgpIC0gMSwgMSwgMCwgMCwgaykuZmlyc3Q7IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCglsbCBsLCByOyBpbnQgazsgCgljaW4gPj4gbCA+PiByID4+IGs7IAoKCXBvdzEwWzBdID0gMTsgCglmb3IgKGludCBpID0gMTsgaSA8PSAxNzsgaSsrKSBwb3cxMFtpXSA9IDFsbCAqIHBvdzEwW2kgLSAxXSAqIDEwICUgTU9EOyAKCglpbnQgYW5zID0gc29sdmUociwgaykgLSBzb2x2ZShsIC0gMSwgayk7IAoJaWYgKGFucyA8IDApIGFucyArPSBNT0Q7IAoKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAp9