#include #include #include using namespace std; using mint=atcoder::modint; int H,W,M; long K; mint pK[26]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin>>H>>W>>K>>M; mint::set_mod(M); mint ans=0,invsum=0; for(int c=1;c<=H*W;c++) { pK[c]=mint(c).pow(K); invsum+=mint(c).inv(); } int U=0,D=0,L=0,R=0; for(int x=0;x0)U|=t; if(x+10)L|=t; if(y+1>H*W-1&1)continue; int t=i; mint c=0; while(t) { int v=t&-t; while(true) { int w=v; w|=(v&U)>>W; w|=(v&D)<>1; w|=(v&R)<<1; w&=t; if(v==w)break; v=w; } t^=v; c+=pK[__builtin_popcount(v)]; } ans+=c; if(i&1&&!(i>>H*W-1&1))ans+=c; } ans*=invsum; ans/=mint(2).pow(H*W); cout<