#include using namespace std; typedef long long int uli; int rint(char nxt){ char ch=getchar(); int v=0; int sgn=1; if(ch=='-')sgn=-1; else{ assert('0'<=ch&&ch<='9'); v=ch-'0'; } while(true){ ch=getchar(); if('0'<=ch && ch<='9')v=v*10+ch-'0'; else{ assert(ch==nxt); break; } } return v*sgn; } //number of cells covered upwards by a bishop at (r,0) in a board of m columns uli upw(uli r,uli m){ return min(r,m-1)+1; } //number of cells of the same color of cell (r,0) in a board of nxm, uli all(uli n,uli m,uli r){ return (n*m+(r+1)%2)/2; } uli c2(uli n){ return (n*(n-1))/2; } uli sm(uli x,uli c){//x+(x-1)+...+(x-c+1) return c2(x+1)-c2(x-c+1); } uli triangle(uli r,uli c){//number of cells in the upward triangle starting at cell (r,0) of a board of c columns ++r;//1-based c=min(c,r); uli w=(r+1)/2; uli cnt=(c+1)/2; uli ans=sm(w,cnt); w=r/2; cnt=c/2; ans+=sm(w,cnt); return ans; } uli triangles(uli n,uli m,uli r){ return triangle(r,m)+triangle(n-1-r,m)-1; } //number of cells covered by a bishop at (r,0) in a board of nxm in at most k moves uli lft(uli n,uli m,uli r,uli k){//(n<=m) r=min(r,n-1-r); if(k==1)return upw(r,m)+upw(n-1-r,m)-1; if(n>m)return all(n,m,r); uli col=(n-1)*(k-1); uli row=( (k%2==0)?(n-1-r):(r) ); if(col>=m-1)return all(n,m,r); // uli column=(n+(r+1)%2)/2; return all(n,col,r)+triangles(n,m-col,row); } uli solve(uli n,uli m,uli r,uli c,uli k){ uli ans=lft(n,c+1,r,k); ans+=lft(n,m-c,r,k); if(k==1)return ans-1; ans-=(n+(r+1)%2)/2; return ans; } int main(){ // freopen("sample.in","r",stdin); // freopen("secret/1.in","r",stdin); // freopen("secret/1.out","w",stdout); int t=rint('\n'); assert(1<=t&&t<=5e5); while(t--){ uli n=rint(' '); assert(1<=n&&n<=1e9); uli m=rint(' '); assert(n+n<=m&&m<=1e9); uli r=rint(' '); assert(1<=r&&r<=n); uli c=rint(' '); assert(1<=c&&c<=m); --r,--c; uli k=rint('\n'); uli ans=solve(n,m,r,c,k); printf("%lld\n",ans); } assert(getchar()==EOF); return 0; }