import sys p, n, m = map(int, input().split()) C = [0] + [0] * n A = list(map(int, input().split())) AA = A[:] B = [] A.sort() if 1 in A: A = A[1:] AC = [0] + [0] * m for i in A: AC[i] += 1 Q_list = [] for i in range(m + 1): if AC[i] != 0: Q_list.append((AC[i], i)) Q_list.sort() QQ = [] pre = 1 for I in Q_list: while I[0] != pre: pre += 1 QQ.append((0, 1)) QQ.append(I) Ans = {} q_idx = 0 fin = 0 while True: try: # TURN, WAIT, END のいずれかを受け取る line = input().strip() except EOFError: break # 終了シグナルを受け取ったらループを抜ける if line.startswith("END"): break if line == "TURN": if q_idx < len(QQ): print(f"ASK {QQ[q_idx][1]}", flush=True) q_idx += 1 res_line = input().split() if res_line[0] == "COUNT": Ans[int(res_line[1])] = int(res_line[2]) else: BC = [] c = 0 for i in B: if i == 1: c += 1 else: for j in range(c): BC.append(i) # 確信度を判定するために元のリストに影響を与えないようにコピー (temp_BC) temp_BC = BC[:] while len(temp_BC) < n: temp_BC.append(1) G = [] for i in range(m + 1): count_diff = Ans.get(i, 0) - AA.count(i) - temp_BC.count(i) for j in range(max(0, count_diff)): G.append(i) # 【変更点】推測(m埋め)なしでGがちょうどN枚特定できているかチェック if len(G) == n: # 確信を持てたのでGUESS G.sort() print("GUESS", *G, flush=True) res_line = input().split() if res_line[0] == "GUESSED": if int(res_line[2]) == 1: fin += 1 else: # 確信が持てないので、安全に ASK 1 をして情報を待つ print("ASK 1", flush=True) res_line = input().split() if res_line[0] == "COUNT": Ans[int(res_line[1])] = int(res_line[2]) elif line == "WAIT": res_line = input().split() if res_line[0] == "COUNT": Ans[int(res_line[1])] = int(res_line[2]) B.append(int(res_line[1])) elif res_line[0] == "GUESSED": if int(res_line[2]) == 1: fin += 1