#include #include using namespace std; #define ll long long #define int long long #define INF 1e18 #define MOD 998244353 int N,M,K; int A[505050]; signed main(){ cin >> N >> M >> K; for(int i = 0;i < N;i++)cin >> A[i]; sort(A, A+N); unordered_map now; for(int i = 0;i < N;i++)now[A[i]] += 1; for(int i = 0;i < M-1;i++){ unordered_map next; vector key; for(auto i:now)key.emplace_back(i.first); sort(key.begin(),key.end()); int l = 0; int r = 0; int S = 0; for (auto j:key){ while(r < key.size() and j-K <= key[r] and key[r] <= j+K){ S += now[key[r]]; S %= MOD; r += 1; } while (l < key.size() and key[l] < j-K){ S += MOD; S -= now[key[l]]; S %= MOD; l += 1; } next[j] += S; } now.swap(next); } int ans = 0; for(auto i:now){ ans += i.second; ans %= MOD; } cout << ans << endl; return 0; }