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);