#include #include namespace atcoder { template std::ostream &operator<<(std::ostream &os, static_modint n) { return os << n.val(); } template std::istream &operator>>(std::istream &is, static_modint &n) { int tmp; is >> tmp; n = tmp; return is; } } // namespace atcoder int main() { using namespace std; using modint = atcoder::static_modint<998244353>; unsigned N, M, K; cin >> N >> M >> K; vector dp(1U << N, 1), prev(1U << N); vector> edges; for (unsigned i{}; i < 1U << N; i++) for (unsigned j{}; j < 1U << N; j++) if (popcount(i & j) >= K) edges.emplace_back(i, j); for (unsigned i{1}; i < M; i++) { swap(dp, prev); ranges::fill(dp, 0); for (const auto &[from, to] : edges) dp[to] += prev[from]; } cout << reduce(cbegin(dp), cend(dp)) << endl; return 0; }