// #include #include using namespace std; using ll = long long; constexpr ll inf = (1LL << 61); ll dx[8] = {0, 1, 0, -1, 1, -1, -1, 1}; ll dy[8] = {-1, 0, 1, 0, 1, 1, -1, -1}; #define rep(i, n) for (ll i = 0; i < (ll)(n); ++i) #define REP(i, init, n) for (ll i = (ll)init; i < (ll)(n); ++i) ll M = 998244353; ll a[10000]; ll dp[2][10000]; ll sum[10101]; int main() { ios::sync_with_stdio(false); std::cin.tie(nullptr); ll n, m, k; cin >> n >> m >> k; rep(i, n) cin >> a[i]; sort(a, a + n); ll cur = 0; rep(i, n) dp[cur][i] = 1; rep(i, n) sum[i + 1] = (sum[i] + dp[cur][i]) % M; vector L(n), R(n); rep(i, n) { L[i] = lower_bound(a, a + n, a[i] - k) - a; R[i] = upper_bound(a, a + n, a[i] + k) - a; } rep(i, m - 1) { rep(j, n) { dp[1 - cur][j] = sum[R[j]] - sum[L[j]]; if (dp[1 - cur][j] < 0) dp[1 - cur][j] += M; } sum[0] = 0; rep(j, n) { sum[j + 1] = sum[j] + dp[1 - cur][j]; if (sum[j + 1] >= M) sum[j + 1] -= M; } cur = 1 - cur; } cout << sum[n] << endl; }