## 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 if M == 1: print(len(a_map)) return # 半分全列挙 a_array = [(a, a_num) for a, a_num in a_map.items()] a_array.sort(key=lambda a : a[0]) dp = a_array.copy() for _ in range(1, M): new_dp = [] queue = deque() sums = 0 dp_index = 0 for a, a_num in a_array: while len(queue) > 0 and queue[0][0] < a - K: x, x_val = queue.popleft() sums -= x_val sums %= MOD while dp_index < len(dp) and dp[dp_index][0] <= a + K: x, x_val = dp[dp_index] queue.append((x, x_val)) sums += x_val sums %= MOD dp_index += 1 ans = (sums * a_num) % MOD new_dp.append((a, ans)) dp = new_dp answer = 0 for _, v in dp: answer += v answer %= MOD print(answer) if __name__ == "__main__": main()