#include // #include // #include using namespace std; // using namespace atcoder; // using bint = boost::multiprecision::cpp_int; using ll = long long; using ull = unsigned long long; using P = pair; using vi = vector; using vvi = vector; using vvvi = vector; #define rep(i,n) for(ll i = 0;i < (ll)n;i++) #define ALL(x) (x).begin(),(x).end() #define sz(c) ((ll)(c).size()) #define LB(A,x) (int)(lower_bound(A.begin(),A.end(),x)-A.begin()) // #define MOD 1000000007 #define MOD 998244353 templateusing min_priority_queue=priority_queue,greater>; templateostream&operator<<(ostream&os,vector&v){for(int i = 0;i < v.size();i++)os<istream&operator>>(istream&is,vector&v){for(T&in:v)is>>in;return is;} templateostream&operator<<(ostream&os,pair&p){os<istream&operator>>(istream&is,pair&p){is>>p.first>>p.second;return is;} int main(){ ios_base::sync_with_stdio(0), cin.tie(0); int n,m,K; cin >> n >> m >> K; vi dp(1 << n,1); rep(i,m-1){ vi DP(1 << n); rep(j,1 << n)rep(k,1 << n){ int cnt = 0; rep(o,n)if(j >> o & 1 && k >> o & 1)cnt++; if(cnt >= K)DP[k] = (DP[k] + dp[j])%MOD; } swap(dp,DP); } ll res = 0; rep(i,1 << n)res = (res + dp[i])%MOD; cout << res << "\n"; return 0; }