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 = [] for i in range(m + 1): if AC[i] != 0: Q.append((AC[i], i)) Q.sort() QQ = [] pre = 1 for I in Q: while I[0] != pre: pre += 1 QQ.append((0, 1)) QQ.append(I) # 【修正1】Ansを辞書として初期化 Ans = {} # 【修正4】TURN内の計算用変数と被らないように、インデックス用変数を q_idx に変更 q_idx = 0 fin = 0 while True: try: turn = input() except EOFError: break if turn == "TURN": if q_idx < len(QQ): # 【修正5】インタラクティブ問題なので flush=True を追加 print(QQ[q_idx][1], flush=True) q_idx += 1 res, a, b = input().split() # 【修正3】受け取った文字列を整数に変換して保存 Ans[int(a)] = int(b) else: BC = [] c = 0 for i in B: # 【修正3】i は数値として比較・計算 if i == 1: c += 1 else: for j in range(c): BC.append(i) while len(BC) < n: BC.append(1) G = [] for i in range(m + 1): # 【修正4】計算用変数を count_diff に変更 # 【修正3】Ansにキー i が無い場合のエラーを防ぐため .get(i, 0) を使用 count_diff = Ans.get(i, 0) - AA.count(i) - BC.count(i) # count_diffがマイナスにならないよう max() で保護 for j in range(max(0, count_diff)): G.append(i) while len(G) < n: G.append(m) # 【修正5】flush=True を追加 print("GUESSED", *G, flush=True) res, a, b = input().split() # 【修正3】b を整数に変換して比較 if int(b) == 1: fin += 1 if fin == 2: exit() else: # 【修正2】input() を再度呼ぶのではなく、受け取り済みの turn を分割する res, a, b = turn.split() if res == "COUNT": # 【修正3】整数に変換 Ans[int(a)] = int(b) B.append(int(a)) if res == "GUESSED": # 【修正3】整数に変換 if int(b) == 1: fin += 1 if fin == 2: exit()