ll@(h,w,k,m),hw=h*w;
unionFind u('m',hw);
mint().setmod(m);
mint a,z,c[hw+1];
rep(i,hw){
	a+=mint(1)/(i+1);
}
rep(i,hw+1){
	c[i]=mint(i)**k;
}
int ma=~0;
rep(i,h){
	ma^=1<<i*w;
}
rep(b,1<<hw){
	int bx=b&(b&ma)>>1;
	int by=b&b>>w;
	u.init();
	rep(j,hw){
		if(bx&1<<j){
			u(j,j+1);
		}
		if(by&1<<j){
			u(j,j+w);
		}
	}
	rep(j,hw){
		if(b&1<<j){
			if(u(j)==j){
				z+=c[u.size(j)];
			}
		}
	}
}
wt(a*z/mint(2)**hw);