#include <iostream>
using namespace std;
int x[50][50],K;
int solve(){
	int q=1,p=0;
	for(int i=0;i<50;i++){
		for(int j=0;j<50;j++){
			if(x[i][j]==1)p+=q;
			q*=2;q%=K;p%=K;
		}
	}
	return p;
}
int Query1(int i1,int i2,int i3,int i4){
	cout<<"? "<<i1<<' '<<i2<<' '<<i3<<' '<<i4<<endl;
	int Va;cin>>Va;
	return Va;
}
int main() {
	int H,W,N;cin>>H>>W>>N>>K;
	for(int i=0;i<50;i+=2){
		for(int j=0;j<50;j+=2){
			int L=Query1(i,j,i+1,j+1);
			if(L==0){}
			else if(L==4){x[i][j]=1;x[i][j+1]=1;x[i+1][j]=1;x[i+1][j+1]=1;}
			else{
				int V1=Query1(i,j,i,j+1),V2=L-V1;
				if(V1==0){}
				else if(V1==2){x[i][j]=1;x[i][j+1]=1;}
				else{x[i][j]=Query1(i,j,i,j);x[i][j+1]=1-x[i][j];}
				
				if(V2==0){}
				else if(V2==2){x[i+1][j]=1;x[i+1][j+1]=1;}
				else{x[i+1][j]=Query1(i+1,j,i+1,j);x[i+1][j+1]=1-x[i+1][j];}
			}
		}
	}
	cout<<"! "<<solve()<<endl;
	return 0;
}