import sys input = lambda :sys.stdin.readline()[:-1] ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ####################################################################### """ """ mod = 998244353 n, m, k = na() a = sorted(na()) l, r = [-1] * n, [-1] * n from bisect import * for i in range(n): # a[i] - k <= a[j] < a[i] + k + 1 l[i] = bisect_left(a, a[i] - k) r[i] = bisect_left(a, a[i] + k + 1) dp = [1] * n for i in range(m-1): rui = [0] + dp for i in range(n): rui[i+1] += rui[i] rui[i+1] %= mod dp = [0] * n for i in range(n): dp[i] = (rui[r[i]] - rui[l[i]]) % mod print(sum(dp) % mod)