#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int n, x, y, z;
int A[N], a;
int B[N], b;
int r, u, v;
void qry(int* A, int a) {
  if (!a) {
    z = 0;
    return;
  }
  printf("? %d ", a);
  for (int i = 0; i < a; i++) printf("%d%c", A[i], " \n"[i == a - 1]);
  fflush(stdout);
  scanf("%d", &z);
}
void solve(int l, int r) {
  if (l == r) {
    u = A[l];
    return;
  }
  int mid = l + r >> 1;
  b = 0;
  for (int i = l; i < mid + 1; i++) B[b++] = A[i];
  qry(B, b);
  if (b & 1) {
    if (z == y)
      solve(l, mid);
    else
      solve(mid + 1, r);
  } else {
    if (z == (x ^ y))
      solve(l, mid);
    else
      solve(mid + 1, r);
  }
}
int main() {
  scanf("%d%d%d", &n, &x, &y);
  for (int i = 0; i < 10; i++) {
    a = 0;
    for (int j = 1; j < n + 1; j++)
      if (j >> i & 1) A[a++] = j;
    qry(A, a);
    if (z == ((a & 1) ? y : (x ^ y))) {
      r |= 1 << i;
      u = i;
    }
  }
  a = 0;
  for (int i = 1; i < n + 1; i++)
    if (i >> u & 1) A[a++] = i;
  solve(0, a - 1);
  v = u ^ r;
  if (u > v) swap(u, v);
  printf("! %d %d\n", u, v);
  return 0;
}
