#include using namespace std; int64_t euler_phi(int64_t n) { int64_t ret = n; for(int64_t i = 2; i * i <= n; i++) { if(n % i == 0) { ret -= ret / i; while(n % i == 0) n /= i; } } if(n > 1) ret -= ret / n; return ret; } using ll=long long; ll modpow(ll n,ll k,ll mod){ ll ret=1; ll pw=n; while (k){ if (k&1) ret=ret*pw%mod; pw=pw*pw%mod; k/=2; } return ret; } int main(){ ll n,m,l; cin>>n>>m>>l; auto query=[&](ll i,ll j){ cout<<"? "<>ret; return ret; }; ll b; { ll l=0,r=1e9+10; while (r-l>1){ ll mid=(l+r)/2; if (query(mid,1)==mid) l=mid; else r=mid; } b=r; } ll g=gcd(n,b); ll p=euler_phi(b/g); ll k=modpow(m,l,p); ll ans=query(n,k); cout<<"! "<