import java.io.*;
import java.util.*;

public class ArknaveM {
    public static void main(String[] args) throws IOException {
        (new ArknaveM()).run();
    }

    static final int MOD = 998_244_353;
    public void run() throws IOException {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int k = scan.nextInt();
        long m = scan.nextLong();

        int p2 = 1;
        while (p2 <= m) {
            p2 <<= 1;
        }

        int[] fact = new int[p2 + 1];
        int[] tcaf = new int[p2 + 1];
        populate(fact, tcaf);

        int[] f = new int[p2 + 1];
        for (int i = 0; i <= m; i++) {
            f[i] = 1;
        }

        for (int b = 1; b < p2; b <<= 1) {
            for (int i = 0; i < p2; i++) {
                if ((i & b) == 0) {
                    f[i] += f[i | b];
                }
            }
        }

        for (int i = 0; i < p2; ++i) {
            if (n <= f[i])
                f[i] = (int)(1L * fact[f[i]] * tcaf[n] % MOD * tcaf[f[i] - n] % MOD);
            else
                f[i] = 0;
        }

        for (int b = 1; b < p2; b <<= 1) {
            for (int i = 0; i < p2; i++) {
                if ((i & b) == 0) {
                    f[i] -= f[i | b];
                    if (f[i] < 0)
                        f[i] += MOD;
                }
            }
        }

        int ans = 0;
        for (int i = 0; i < p2; ++i) {
            int pc = Integer.bitCount(i);
            if (pc >= k) {
                ans += f[i];
                if (ans >= MOD)
                    ans -= MOD;
            }
        }

        ans = (int)(1L * ans * fact[n] % MOD);

        System.out.println(ans);
    }

    public void populate(int[] fact, int[] tcaf) {
        int n = fact.length;
        fact[0] = 1;
        for (int i = 1; i < n; i++) {
            fact[i] = (int)(1L * i * fact[i - 1] % MOD);
        }

        tcaf[n - 1] = 1;
        int b = fact[n - 1];
        for (int e = MOD - 2; e > 0; e >>= 1) {
            if (e % 2 > 0) {
                tcaf[n - 1] = (int)(1L * tcaf[n - 1] * b % MOD);
            }

            b = (int)(1L * b * b % MOD);
        }

        for (int i = n - 2; i >= 0; i--) {
            tcaf[i] = (int)(1L * (i + 1) * tcaf[i + 1] % MOD);
        }
    }
}
