#include <iostream>
#include <vector>
using namespace std;

const int MOD = 998244353;

int64_t ModPow(int64_t a, int64_t b, uint64_t m) {
  int64_t ret = (m>1);
  for(;;) {
    if (b&1) ret = (ret * a) % MOD;
    if (!(b>>=1)) return ret;
    a = (a * a) % MOD;
  }
}

int main() {
  int N, K, M;
  while (cin >> N >> K >> M) {
    vector<int64_t> perm(max(M,N)+1);
    perm[N] = 1;
    for (int64_t x = 1; x <= N; x++) perm[N] = (perm[N] * x) % MOD;
    for (int64_t x = N+1; x <= M; x++) perm[x] = (perm[x-1] * x) % MOD * ModPow(x-N, MOD-2, MOD) % MOD;
    vector<vector<int64_t>> comb(25, vector<int64_t>(25));
    for (int a = 0; a <= 24; a++) comb[a][0] = comb[a][a] = 1;
    for (int a = 2; a <= 24; a++) for (int b = 1; b < a; b++) comb[a][b] = comb[a-1][b-1] + comb[a-1][b];

    int64_t ret = 0;
    for (int b = M; b >= 0; b--) {
      int bits = __builtin_popcount(b);
      if (bits < K) continue;
      int cnt = 0;
      for (int x = 24, left = bits; x >= left; x--) {
        if ((M+1)&(1<<x)) {
          if (b&(1<<x)) left--; else cnt += (1<<(x-left));
        } else {
          if (b&(1<<x)) break;
        }
      }
      for (int bits2 = bits, mul = 1; bits2 >= K; bits2--, mul = -mul) {
        ret += mul * comb[bits][bits2] * perm[cnt] % MOD;
      }
    }
    cout << (ret%MOD+MOD)%MOD << endl;
  }
}
