#include #include #include using namespace std; constexpr int mod = 998244353; short N, M; int K; int A[10000]; short l[10000], r[10000]; int dp[10000], dpsum[10000]; int main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); scanf("%hd%hd%d", &N, &M, &K); for(short i = 0; i < N; ++i) scanf("%d", &A[i]); sort(A, A + N); for(short i = 0; i < N; ++i) l[i] = lower_bound(A, A + N, A[i] - K) - A, r[i] = upper_bound(A, A + N, A[i] + K) - A; for(short i = 0; i < N; ++i) dp[i] = 1; for(short _ = 1; _ < M; ++_) { memset(dpsum, 0, sizeof(dpsum)); for(int i = 0; i < N; ++i) { dpsum[i + 1] = dpsum[i] + dp[i]; if(dpsum[i + 1] >= mod) dpsum[i + 1] -= mod; } for(int i = 0; i < N; ++i) { dp[i] = dpsum[r[i]] - dpsum[l[i]]; if(dp[i] < 0) dp[i] += mod; } } int ans = 0; for(short i = 0; i < N; ++i) { ans += dp[i]; if(ans >= mod) ans -= mod; } cout << ans << "\n"; return 0; }