#include using namespace std; int main() { int N, M, K, Ans = 0, m = 998244353; cin >> N >> M >> K; vector A(N), imos(N + 1, 1); for (int &B : A) cin >> B; vector> LR(N); sort(A.begin(), A.end()); for (int i = 0; i < N; i++) { LR.at(i).first = lower_bound(A.begin(), A.end(), A.at(i) - K) - A.begin(); LR.at(i).second = upper_bound(A.begin(), A.end(), A.at(i) + K) - A.begin(); } for (int i = 1; i < M; i++) { vector B(N + 1); for (int j = 0; j < N; j++) { B.at(LR.at(j).first) = (B.at(LR.at(j).first) + imos.at(j)) % m; B.at(LR.at(j).second) = (B.at(LR.at(j).second) - imos.at(j)); if (B.at(LR.at(j).second) < 0) B.at(LR.at(j).second) += m; } for (int j = 1; j < N; j++) B.at(j) = ((B.at(j - 1) + B.at(j)) % m); swap(imos, B); } for (int i = 0; i < N; i++) Ans = (Ans + imos.at(i)) % m; cout << Ans << endl; }