#include <bits/stdc++.h>
using namespace std;
int ans[11], n, x, y, st;
void query(int i) {
  if ((1 << i) > n) return;
  int cnt = 0;
  for (int j = 1; j <= n; j++)
    if (((1 << i) & j)) {
      cnt++;
    }
  printf("? %d ", cnt);
  for (int j = 1; j <= n; j++)
    if (((1 << i) & j)) {
      printf("%d ", j);
    }
  puts("");
  fflush(stdout);
  scanf("%d", ans + i);
  if (ans[i] == (x ^ y) || ans[i] == y)
    ans[i] = 1, st = i;
  else
    ans[i] = 0;
}
int a, b;
void requery(int i) {
  if ((1 << i) > n) return;
  int cnt = 0;
  for (int j = 1; j <= n; j++)
    if (!((1 << i) & j) || ((1 << st) & j)) {
      cnt++;
    }
  printf("? %d ", cnt);
  for (int j = 1; j <= n; j++)
    if (!((1 << i) & j) || ((1 << st) & j)) {
      printf("%d ", j);
    }
  puts("");
  fflush(stdout);
  int s;
  scanf("%d", &s);
  if (s == (x ^ y) || s == y) {
    b += 1 << i;
    if (ans[i] == 0) a += 1 << i;
  } else if (ans[i])
    a += 1 << i;
}
int main() {
  cin >> n >> x >> y;
  for (int i = 0; i < 10; i++) query(i);
  for (int i = 0; i < 10; i++)
    if (i != st) requery(i);
  a += 1 << st;
  if (a > b) swap(a, b);
  cout << '!' << ' ' << a << ' ' << b << endl;
  return 0;
}
