## https://yukicoder.me/problems/no/1349 def main(): N, Q, P = map(int, input().split()) A = list(map(int, input().split())) lrk = [] for _ in range(Q): l, r, k = map(int, input().split()) lrk.append((l - 1, r - 1, k)) r_array = [[] for _ in range(N)] for i in range(Q): l, r, k = lrk[i] r_array[r].append((i, l, k)) answer = [-1] * Q max_left_index = {} for r in range(N): a = A[r] new_max_left_index = max_left_index.copy() for key, value in max_left_index.items(): new_key = (a * key) % P if new_key not in new_max_left_index: new_max_left_index[new_key] = value else: new_max_left_index[new_key] = max(new_max_left_index[new_key], value) if a not in new_max_left_index: new_max_left_index[a] = r else: new_max_left_index[a] = max(new_max_left_index[a], r) max_left_index = new_max_left_index for index, l, k in r_array[r]: if k not in max_left_index: answer[index] = False else: x = max_left_index[k] if x >= l: answer[index] = True else: answer[index] = False for i in range(Q): if answer[i]: print("Yes") else: print("No") if __name__ == "__main__": main()