#include <bits/stdc++.h>
using namespace std;
int n, x, y, m, nr, nr1, st, dr, i, j, z, p1, p2, aux, a[1004], b[1004],
    s[1004], d[1004];
bool ok, c[1004];
int main() {
  scanf("%d %d %d", &n, &x, &y);
  ok = true;
  y = 1;
  s[1] = 1;
  d[1] = n;
  while (ok == true) {
    nr1 = 0;
    nr = 0;
    for (i = 1; i <= y; i++) {
      if (s[i] != d[i]) {
        for (j = s[i]; j <= ((s[i] + d[i]) / 2); j++) b[++nr1] = j;
        for (j = ((s[i] + d[i]) / 2 + 1); j <= d[i]; j++) a[++nr] = j;
      }
    }
    printf("? %d ", nr1);
    for (i = 1; i <= nr1; i++) printf("%d ", b[i]);
    printf("\n");
    fflush(stdout);
    scanf("%d", &z);
    if (z != 0 && z != x) break;
    for (i = y; i >= 1; i--) {
      s[2 * i] = (s[i] + d[i]) / 2 + 1;
      d[2 * i] = d[i];
      s[2 * i - 1] = s[i];
      d[2 * i - 1] = (s[i] + d[i]) / 2;
    }
    y *= 2;
  }
  st = 1;
  dr = nr1;
  while (st <= dr) {
    m = (st + dr) / 2;
    printf("? %d ", m);
    for (i = 1; i <= m; i++) printf("%d ", b[i]);
    printf("\n");
    fflush(stdout);
    scanf("%d", &z);
    if (z != 0 && z != x)
      dr = m - 1;
    else
      st = m + 1;
  }
  p1 = b[st];
  for (i = 1; i <= n; i++) c[i] = false;
  for (i = 1; i <= nr1; i++) c[b[i]] = true;
  if (y > 1) {
    for (i = 1; i <= y; i++) {
      if (s[i] <= p1 && p1 <= d[i]) break;
    }
    nr = 0;
    for (j = s[i]; j < p1; j++) {
      if (c[j] == false) a[++nr] = j;
    }
    for (j = (p1 + 1); j <= d[i]; j++) {
      if (c[j] == false) a[++nr] = j;
    }
  }
  st = 1;
  dr = nr;
  if (st < dr) {
    while (st <= dr) {
      m = (st + dr) / 2;
      printf("? %d ", m);
      for (i = 1; i <= m; i++) printf("%d ", a[i]);
      printf("\n");
      fflush(stdout);
      scanf("%d", &z);
      if (z != 0 && z != x)
        dr = m - 1;
      else
        st = m + 1;
    }
  }
  p2 = a[st];
  if (p1 > p2) {
    aux = p1;
    p1 = p2;
    p2 = aux;
  }
  printf("! %d %d\n", p1, p2);
  fflush(stdout);
  return 0;
}
