#include #include 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 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> comb(25, vector(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<= K; bits2--, mul = -mul) { ret += mul * comb[bits][bits2] * perm[cnt] % MOD; } } cout << (ret%MOD+MOD)%MOD << endl; } }