#include<bits/stdc++.h>
using namespace std;
#define inf INT_MAX
#define iinf inf
#define linf LLONG_MAX
#define pii pair<int,int>
#define vi vector<int>
#define vvi vector<vi>
#define pipii pair<int,pii>
#define vpii vector<pair<int,int>>
#define _max(x,y) (((x)>(y))?(x):(y))
#define _min(x,y) (((x)<(y))?(x):(y))
#define max(...) max({__VA_ARGS__})
#define min(...) min({__VA_ARGS__})
#define tomax(x,...) ((x)=max((x),__VA_ARGS__))
#define tomin(x,...) ((x)=min((x),__VA_ARGS__))
#define tomx(x,...) tomax(x,__VA_ARGS__)
#define tomn(x,...) tomin(x,__VA_ARGS__)
#define link tfshtrj
#define y1 drshzhsrd
#define mkp make_pair
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define emp emplace
#define eb(...) emplace_back(__VA_ARGS__)
#define rep(x,y,z) for(int x=(y);x<=(z);x++)
#define per(x,y,z) for(int x=(y);x>=(z);x--)
#define all(x) x.begin(),x.end()
#define allt(x,y,z) x.begin()+y,x.begin()+z
#define fi first
#define se second
#define beg begin
#define debug(x) cout<<#x<<": "<<x<<"\n"
int n,m,q;
vi v;
bool tag[100];
bitset<1004> fal,tru;
int cnt;
map<pii,bool> vis;
bool ask(int x,int y){
if(x>y) swap(x,y);
if(x==y) return 1;
if(vis.count(mkp(x,y))) return vis[mkp(x,y)];
cnt++;
cout<<"? "<<x<<" "<<y<<endl;
int c;
cin>>c;
return vis[mkp(x,y)]=(c);
}
main(){
ios::sync_with_stdio(0),cin.tie(nullptr);
cin>>n>>m>>q;
rep(i,0,89){
rep(j,2,11){
tag[i]|=!ask(i*11+1,i*11+j);
}
if(!tag[i]) rep(j,1,11) tru[i*11+j]=1;
}
int t1=0;
rep(i,0,89){
t1+=tag[i];
}
if(!t1){
cout<<"!";
rep(i,991,1000) cout<<" "<<i;
cout<<endl;
return 0;
}
rep(i,991,1000){
if(!ask(tru._Find_first(),i)){
v.pb(i);
fal[i]=1;
}else tru[i]=1;
}
rep(i,0,89){
if(!tag[i]) continue;
bool t=ask(tru._Find_first(),i*11+1);
if(!t){
rep(j,1,11){
if(ask(i*11+1,i*11+j)) v.pb(i*11+j);
else tru[i*11+j]=1;
}
}else{
rep(j,2,11){
if(!ask(i*11+1,i*11+j)) v.pb(i*11+j);
else tru[i*11+j]=1;
}
}
}
sort(all(v));
cout<<"!";
for(int&i:v) cout<<" "<<i;
cout<<endl;
}