#include <bits/stdc++.h>
using namespace std;
int n, m, num[50005], nxt[50005];
int getrand() { return rand() * rand(); }
void query(int x) {
  printf("? %d\n", x);
  fflush(stdout);
  scanf("%d%d", &num[x], &nxt[x]);
}
void ans(int x) {
  printf("! %d\n", x);
  fflush(stdout);
  exit(0);
}
int main() {
  srand(20030314);
  int y;
  scanf("%d%d%d", &n, &y, &m);
  if (n < 2000)
    for (int i = 1; i <= n; i++) {
      query(i);
      if (num[i] < m && num[i] > num[y]) y = i;
      if (num[i] == m) ans(num[i]);
    }
  else
    for (int i = 1; i <= 1000; i++) {
      int x = getrand() % n + 1;
      while (nxt[x]) x = getrand() % n + 1;
      query(x);
      if (num[x] < m && num[x] > num[y]) y = x;
      if (num[x] == m) ans(num[x]);
    }
  while (1) {
    if (y == -1) ans(-1);
    if (!nxt[y]) query(y);
    if (num[y] >= m) ans(num[y]);
    y = nxt[y];
  }
}
