#include <bits/stdc++.h>
using namespace std;
long long MOD = 1e9 + 7;
long long PRIME = 102838201;
long long INF = LLONG_MAX / 4;
vector<string> &split(const std::string &s, char delim, vector<string> &e) {
  stringstream ss(s);
  string item;
  while (getline(ss, item, delim)) e.push_back(item);
  return e;
}
long long Pow(long long a, long long b, long long Mo) {
  long long ans = 1;
  for (; b; b >>= 1, a = a * a % Mo)
    if (b & 1) ans = ans * a % Mo;
  return ans;
}
long long nCr(long long n, long long r) {
  static long long MAXF = 1e6;
  static std::vector<long long> fact(MAXF, 1);
  for (int i = 1; i < MAXF; ++i) fact[i] = (fact[i - 1] * i) % MOD;
  MAXF = 0;
  return (fact[n] * Pow((fact[r] * fact[n - r]) % MOD, MOD - 2, MOD)) % MOD;
}
vector<int> Zfunc(string &s) {
  int n = s.length();
  vector<int> z(n, 0);
  for (int i = 1, l = 0, r = 0; i < n; i++) {
    if (i <= r) z[i] = min(z[i - l], r - i + 1);
    while (i + z[i] < n && s[i + z[i]] == s[z[i]]) z[i]++;
    if (r < i + z[i] - 1) l = i, r = i + z[i] - 1;
  }
  return z;
}
long long solve() { return 0; }
int main(int argc, char const *argv[]) {
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  long long n, s, x;
  cin >> n >> s >> x;
  long long u = -1;
  std::vector<long long> v(n);
  for (int i = 0; i < n; ++i) {
    v[i] = 1 + i;
  }
  cout << "? " << s << '\n';
  cout.flush();
  long long num, index;
  cin >> num >> index;
  long long maxVal;
  if (num >= x) {
    cout << "! " << num << '\n';
    cout.flush();
    return 0;
  }
  maxVal = num;
  s = index;
  srand(time(0));
  random_shuffle(v.begin(), v.end());
  int cc = 0;
  for (int i = 0; i < min((int)v.size(), 1000); ++i) {
    cout << "? " << v[i] << '\n';
    cout.flush();
    cc++;
    cin >> num >> index;
    if (num < x) {
      if (maxVal < num) {
        maxVal = num;
        s = index;
      }
    }
    if (index == -1) {
      if (num < x) {
        cout << "! -1" << '\n';
        cout.flush();
        return 0;
      }
    }
  }
  while (1) {
    if (s == -1 || cc == 1999) {
      cout << "! -1\n";
      cout << '\n';
      cout.flush();
      return 0;
    }
    cc++;
    cout << "? " << s << '\n';
    cout.flush();
    cin >> num >> index;
    s = index;
    if (num >= x) {
      cout << "! " << num << '\n';
      cout.flush();
      return 0;
    }
  }
  return 0;
}
