#include<bits/stdc++.h>usingnamespace std;constint N =2e5+10;constint M =1e9+7;constint MOD =998244353;typedeflonglong ll;typedef pair<ll,ll>PII;typedef pair<char,int>PCI;ll n, m, k;ll dp[1010][5050];//第i个数为j的总的方案数
ll sum[N];//dp[i][j] = dp[i - 1][j] + pre[j - k] + pre[m] - pre[j + k - 1];//后缀用总的 - 前缀intmain(){cin >> n >> m >> k;for(int i =1; i <= m; i ++){sum[i]= sum[i -1]+1;}//初始化本身也是一个for(int i =2; i <= n; i ++){for(int j =1; j <= m; j ++){if(j + k <= m){dp[i][j]=(dp[i][j]+((sum[m]- sum[j + k -1])% MOD + MOD)% MOD)% MOD;}//用前缀和在dp过程中来优化是真的不好想if(j - k >=1){if(k ==0){dp[i][j]=(dp[i][j]+ sum[j - k -1]% MOD)% MOD;}//等于0时左右两段就会有重复deelse{dp[i][j]=(dp[i][j]+ sum[j - k]% MOD)% MOD;}}}//预处理前缀和memset(sum,0,sizeof sum);for(int j =1; j <= m; j ++){sum[j]=(sum[j -1]+ dp[i][j])% MOD;}}cout << sum[m]% MOD << endl;return0;}