## https://yukicoder.me/problems/no/3391 MOD = 998244353 from collections import deque def main(): N, M, K = map(int, input().split()) A = list(map(int, input().split())) a_map = {} for a in A: if a not in a_map: a_map[a] = 0 a_map[a] += 1 # 座標圧縮 value_set = set(a_map.keys()) value_list = list(value_set) value_list.sort() value_map = {} for i, a in enumerate(value_list): value_map[a] = i value_max = len(value_list) dp = [0] * value_max for i in range(value_max): dp[i] = a_map[value_list[i]] dp_sift = [dp, [0] * value_max] for idx in range(1, M): low_index = 0 high_index = 0 new_dp = dp_sift[idx % 2] cum_d = dp[0] for i in range(value_max): a0 = value_list[i] while low_index < i and a0 - value_list[low_index] > K: cum_d -= dp[low_index] cum_d %= MOD low_index += 1 while high_index + 1 < value_max and value_list[high_index + 1] <= a0 + K: high_index += 1 cum_d += dp[high_index] cum_d %= MOD new_dp[i] = (cum_d * a_map[value_list[i]]) % MOD dp = new_dp answer = 0 for i in range(value_max): answer += dp[i] answer %= MOD print(answer) if __name__ == "__main__": main()