import sys from sys import stdin from math import isqrt def input(): return stdin.read() def factorize(n): factors = {} i = 2 while i * i <= n: while n % i == 0: factors[i] = factors.get(i, 0) + 1 n = n // i i += 1 if n > 1: factors[n] = 1 return factors def main(): data = sys.stdin.read().split() ptr = 0 N = int(data[ptr]) Q = int(data[ptr+1]) P = int(data[ptr+2]) ptr +=3 A = list(map(int, data[ptr:ptr+N])) ptr +=N queries = [] for _ in range(Q): L = int(data[ptr])-1 # 0-based R = int(data[ptr+1])-1 K = int(data[ptr+2]) queries.append( (L, R, K) ) ptr +=3 # Preprocessing for K=0 case # 1. Check for A[j] mod P ==0 has_zero = [0]*(N+1) for i in range(N): has_zero[i+1] = has_zero[i] + (1 if A[i] % P ==0 else 0) # Factorize P factors = factorize(P) if not factors: # P is 1 pass else: primes = list(factors.items()) # Precompute prefix sums for exponents ex_prefix = {} for p, e in primes: ex = [0]*(N+1) for i in range(N): a = A[i] cnt =0 while a % p ==0 and a !=0: cnt +=1 a = a //p ex[i+1] = ex[i] + cnt ex_prefix[p] = ex # Preprocessing for K!=0 case: DP for each L # Since P can be up to 5000, N is 5000, and Q is 2e5, precompute masks for each L and R. MOD = P pre = [ [0]*(N) for _ in range(N) ] # pre[L][R] = mask for [L, R] for L in range(N): current_mask = 0 for R in range(L, N): a = A[R] % MOD if a == 0: new_part = 0 else: new_part = 0 if current_mask ==0: new_part = 0 else: tmp = current_mask while tmp: lsb = tmp & -tmp idx = (lsb).bit_length() -1 m = (idx * a) % MOD new_part |= 1 << m tmp ^= lsb current_mask = (current_mask | new_part) if a !=0: current_mask |= 1 << a current_mask &= (1 << MOD) -1 pre[L][R] = current_mask # Process queries results = [] for L, R, K in queries: if K ==0: # Check if any zero in [L, R] count = has_zero[R+1] - has_zero[L] if count >0: results.append("Yes") continue if P ==1: # Any non-empty subset, mod 1 is 0 results.append("Yes") continue # Check if all primes have enough exponents ok = True for p, e in primes: total = ex_prefix[p][R+1] - ex_prefix[p][L] if total < e: ok = False break if ok: results.append("Yes") else: results.append("No") else: if P ==1: # K must be 0, but K!=0 here results.append("No") continue if L > R: results.append("No") continue mask = pre[L][R] if (mask & (1 << K)) !=0: results.append("Yes") else: results.append("No") print('\n'.join(results)) if __name__ == "__main__": main()