#include <bits/stdc++.h>
using namespace std;
int n, st, x, cnt, val, nxt, mx, res, a[100005], b[100005];
inline void query(int pos, bool f) {
  printf("? %d\n", pos);
  fflush(stdout);
  scanf("%d %d", &val, &nxt);
  if (f && val < x && val > mx) {
    mx = val;
    res = pos;
  }
}
inline void output(int num) {
  printf("! %d\n", num);
  fflush(stdout);
  exit(0);
}
int main() {
  srand((unsigned long long)new char);
  scanf("%d%d%d", &n, &st, &x);
  res = st;
  query(st, true);
  if (val >= x) output(val);
  for (int i = 0; i < 1000; i++)
    query((rand() % 32768 * 100 + rand()) % n + 1, true);
  for (int i = 0; i < 990; i++) {
    query(res, false);
    if (nxt != -1 && val < x)
      res = nxt;
    else if (val >= x)
      output(val);
  }
  output(-1);
  return 0;
}
