from itertools import accumulate import bisect N, M, K = (int(x) for x in input().split()) A=list(map(int, input().split())) A=sorted(A) mod = 998244353 mA, MA = [], [] for i in A: idxl = bisect.bisect_left(A, i-K) idxr = bisect.bisect_right(A, i+K) mA.append(idxl) MA.append(idxr-1) dp = [1]*N new_dp = [0]*N for i in range(M-1): acc_dp = list(accumulate(dp)) for j in range(N): l, r = mA[j], MA[j] if l == 0: new_dp[j] = acc_dp[r] else: new_dp[j] = acc_dp[r] - acc_dp[l-1] new_dp[j] %= mod dp, new_dp = new_dp, [0]*N print(sum(dp)%mod)