#include <bits/stdc++.h>
using namespace std;
int main() {
  int x, y, xor_val, xor_val2 = 0, xor_val3, fir = -1;
  int n, i, j, k;
  scanf("%d%d%d", &n, &x, &y);
  int bits = log2(n - 1) + 1;
  vector<int> v;
  for (i = 0; i < bits; ++i) {
    v.clear();
    for (j = 0; j < n; ++j) {
      if ((j >> i) & 1) {
        v.push_back(j);
      }
    }
    printf("? %lu ", v.size());
    for (j = 0; j < v.size(); ++j) {
      printf("%d ", v[j] + 1);
    }
    fflush(stdout);
    scanf("%d", &xor_val);
    if (xor_val != x && xor_val != 0 && fir == -1) {
      if (v.size() > n / 2) {
        vector<int> v2;
        for (j = 0; j < n; ++j) {
          for (k = 0; k < v.size() && v[k] < j; ++k)
            ;
          if (k < v.size() && v[k] == j) {
            ++k;
            continue;
          }
          v2.push_back(j);
        }
        v = v2;
      }
      int mid, lo = 0, hi = v.size() - 1;
      while (lo < hi) {
        mid = (lo + hi) / 2;
        printf("? %d ", mid + 1);
        for (j = 0; j <= mid; ++j) {
          printf("%d ", v[j] + 1);
        }
        fflush(stdout);
        scanf("%d", &xor_val3);
        if (xor_val3 != 0 && xor_val3 != x) {
          hi = mid;
        } else {
          lo = mid + 1;
        }
      }
      fir = v[lo];
    }
    if (xor_val != x && xor_val != 0) {
      xor_val2 |= (1 << i);
    }
  }
  int a = min(fir, xor_val2 ^ fir), b = max(fir, xor_val2 ^ fir);
  printf("! %d %d", a + 1, b + 1);
  fflush(stdout);
  return 0;
}
