#include <bits/stdc++.h>
using namespace std;
bool vst[55555];
int main() {
  srand(time(NULL));
  int N, X, st, p, val;
  cin >> N >> st >> X;
  printf("? %d\n", st);
  fflush(stdout);
  scanf("%d%d", &val, &p);
  vst[st] = 1;
  int mm = val, pos = st;
  int step = 997, n = st;
  for (int i = 0; i < 1000 && i < N; i++) {
    int n = (n + step) % N;
    if (n == 0) n = N;
    printf("? %d\n", n);
    fflush(stdout);
    scanf("%d%d", &val, &p);
    if (val > X) continue;
    if (val == X) {
      printf("! %d\n", X);
      fflush(stdout);
      return 0;
    }
    if (X - val < X - mm) {
      mm = val;
      pos = n;
    }
  }
  st = pos;
  for (int i = 0; i < 900 && i < N; i++) {
    printf("? %d\n", st);
    fflush(stdout);
    scanf("%d%d", &val, &p);
    if (val >= X) {
      printf("! %d\n", val);
      fflush(stdout);
      return 0;
    }
    if (p < 0) {
      puts("! -1");
      fflush(stdout);
      return 0;
    }
    st = p;
  }
  int mmm = 0x3f3f3f3f;
  for (int i = N; i >= N - 90; i++) {
    printf("? %d\n", st);
    fflush(stdout);
    scanf("%d%d", &val, &p);
    if (val == X) {
      printf("! %d\n", X);
      return 0;
    }
    if (val > X) mmm = min(mmm, val);
  }
  if (mmm == 0x3f3f3f3f)
    puts("! -1");
  else
    printf("! %d\n", mmm);
  fflush(stdout);
  return 0;
}
