#include using namespace std; using ll = long long; const int MOD = 998244353; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, M, K; cin >> N >> M >> K; vector> edges; for (int u = 0; u < N; u++) { for (int v = u + 1; v < N; v++) { edges.push_back({u, v}); } } int E = edges.size(); if (M < 0 || M > E) { cout << 0 << '\n'; return 0; } ll ans = 0; vector removed(E, 0); for (int i = 0; i < M; i++) removed[i] = 1; sort(removed.begin(), removed.end()); do { vector> g(N); for (int i = 0; i < E; i++) { if (removed[i]) continue; auto [u, v] = edges[i]; g[u].push_back(v); g[v].push_back(u); } vector dist(N, -1); queue q; dist[0] = 0; q.push(0); while (!q.empty()) { int v = q.front(); q.pop(); for (int to : g[v]) { if (dist[to] == -1) { dist[to] = dist[v] + 1; q.push(to); } } } if (dist[N - 1] == K) { ans++; if (ans >= MOD) ans -= MOD; } } while (next_permutation(removed.begin(), removed.end())); cout << ans << '\n'; return 0; }