#include #include #include #include #include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; using vi = vector; using vvi = vector; using vvvi = vector; using vll = vector; using vvll = vector; using vvvll = vector; using vmi = vector; using vvmi = vector; using vvvmi = vector; #define all(a) (a).begin(), (a).end() #define rep2(i, m, n) for (int i = (m); i < (n); ++i) #define rep(i, n) rep2(i, 0, n) #define drep2(i, m, n) for (int i = (m)-1; i >= (n); --i) #define drep(i, n) drep2(i, n, 0) mint op(mint a, mint b){ return a+b; } mint e(){return 0;} using p = pair; int main(){ int n, m, k; cin >> n >> m >> k; vi a(n); rep(i, n)cin >> a[i]; sort(all(a)); vector

vp(n); rep(i, n){ int s; if(a[i] - a[0] <= k){ s = 0; }else{ int l = 0, r = i; int mid; while(r-l>1){ mid = (l+r)/2; if(a[i] - a[mid] <= k){ r = mid; }else{ l = mid; } } s = r; } int t; if(a[n-1] - a[i] <= k){ t = n-1; }else{ int l = i, r = n-1; int mid; while(r-l>1){ mid = (l+r)/2; if(a[mid] - a[i] <= k){ l = mid; }else{ r = mid; } } t = l; } vp[i] = {s, t}; } vvmi dp(2, vmi(n, mint(0))); rep(i, n)dp[0][i] = mint(1); rep2(i, 1, m){ int c = i%2; vmi s(n+1, 0); rep(j, n) s[j+1] = s[j] + dp[1-c][j]; rep(j, n){ auto [l, r] = vp[j]; dp[c][j] = s[r+1] - s[l]; } }mint ans = mint(0); rep(i, n)ans += dp[(m-1)%2][i]; cout << ans.val() << endl; return 0; }