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") ####################################################################### """ a< b< c< d が長方形をなす b - a = d - c c - b = a - d a + d = b + c a + b = c + d d - b = b - d 2b = 2d 2a = 2c 対角線が中心を通る ペアが k 個と そうでないのが m 個あるときの答え """ mod = 998244353 nn = 3 * 10 ** 5 fact = [1] * nn for i in range(nn - 1): fact[i + 1] = fact[i] * (i + 1) % mod invfact = [1] * nn invfact[nn - 1] = pow(fact[nn - 1], mod - 2, mod) for i in range(nn - 1)[::-1]: invfact[i] = invfact[i + 1] * (i + 1) % mod def binom(x, y): if x < 0 or y < 0 or x - y < 0: return 0 return fact[x] * invfact[y] % mod * invfact[x - y] % mod inv = [0] * nn for i in range(1, nn): inv[i] = invfact[i] * fact[i-1] % mod def g(n): ans = 0 for i in range(n): ans += inv[i+1] ans %= mod return ans * n % mod """ 状態として、 (x, y) x = 0, 1 y = 0, ..., k (x, y) から x = 0 のとき (2 * k - y * 2)/n の確率で その状態になる確率 * その状態から抜け出せるまでの期待値 y/n で 何も起きない y/n で (x + 1, y - 1) (n - 2k) / n で何も起きない x = 1 (2 * k - y * 2 - 2) / n で  y / n で x = 確率p のものを 得るまでの期待値 1/1 - (1 - p) = 1/p """ def solve(k, m): n = k * 2 + m p0 = [0] * (k + 1) p1 = [0] * (k + 1) p0[0] = 1 for i in range(k + 1): if i < k: p0[i+1] += p0[i] * (2 * k - i * 2) % mod * inv[2 * k - i] % mod p0[i+1] %= mod # print(i, 2 * k - i - 2) if i > 0: p1[i-1] += p0[i] * i % mod * inv[2 * k - i] % mod p1[i-1] %= mod for i in range(k): # print(i, p1[i], (2 * k - i * 2 - 2), 2 * k - i - 2) if i < k: p1[i+1] += p1[i] * (2 * k - i * 2 - 2) % mod * inv[2 * k - i - 2] % mod p1[i+1] %= mod # print(n, m, k) # print([x * 9 % mod for x in p0]) # print([x * 9 % mod for x in p1]) ans = 0 for i in range(k + 1): ans += p0[i] * inv[2 * k - i] % mod * n % mod ans %= mod for i in range(k + 1): ans += p1[i] * inv[2 * k - i - 2] % mod * n % mod ans %= mod # print(ans * 9 % mod) return ans for _ in range(ni()): n, l = na() d = na() if l % 2: print(g(n)) else: j = 0 k = 0 for i in range(n): while j < n and d[j] < d[i] + l // 2: j += 1 if j < n and d[j] == d[i] + l // 2: k += 1 if k <= 1: print(g(n)) else: print(solve(k, n - 2 * k))