from collections import defaultdict class UnionFind: def __init__(self, n): self.n = n self.parents = [-1] * n def find(self, x): if self.parents[x] < 0: return x else: self.parents[x] = self.find(self.parents[x]) return self.parents[x] def union(self, x, y): x = self.find(x) y = self.find(y) if x == y: return if self.parents[x] > self.parents[y]: x, y = y, x self.parents[x] += self.parents[y] self.parents[y] = x def solve(): n, k, x = map(int,input().split()) h = list(map(int,input().split())) if k == n: if max(h) == min(h): print("Yes") else: print("No") return v = [h[i+1] - h[i] for i in range(n-1)] uf = UnionFind(n+1) for i in range(n-k+1): # h[i], ..., h[i+k-1] if i == 0: uf.union(i+k-1, n-1) elif i == n-k: uf.union(i-1, n) else: uf.union(i-1, i+k-1) dr = 0 dg = 0 mode = 0 if uf.find(n-1) == uf.find(n): mode = 1 t = defaultdict(int) for i in range(n-1): if uf.find(n-1) == uf.find(i): dr += v[i] elif uf.find(n) == uf.find(i): dg += v[i] else: t[uf.find(i)] += v[i] if t[uf.find(i)] > 0: print("No") return if dr % x != 0: print("No") return if dg % x != 0: print("No") return if mode: tmp = - dr for i in range(n-1): if uf.find(n-1) == uf.find(i): tmp += v[i] if tmp > 0: print("No") return if not mode: if dr < 0: print("No") return tmp = - dr for i in range(n-1): if uf.find(n-1) == uf.find(i): tmp += v[i] if tmp > 0: print("No") return if dg > 0: print("No") return tmp = 0 for i in range(n-1): if uf.find(n) == uf.find(i): tmp += v[i] if tmp > 0: print("No") return for i, c in t.items(): if c != 0: print("No") return print("Yes") t = int(input()) for _ in range(t): solve()