#include"iostream" #include"cstdio" #include"cmath" #include"cstring" using namespace std; const int N=155; int n,m,q,s; int dp[N][N][9][9],le[N][N],rg[N][N],sum[N][N]; int lowbit[N]; inline int max(int a,int b){ return a>b?a:b; } void RMQ() { int j1,j2,row,col; int mx=int(log(1.0*n)/log(2.0)); int my=int(log(1.0*m)/log(2.0)); for(j1=0;j1<=mx;j1++) { for(j2=0;j2<=my;j2++) { if(!j1 && !j2) continue; for(row=1;row+(1<=1;l--) { if(dp[i][l][0][0]==-1) rg[i][l]=l-1; else rg[i][l]=rg[i][l+1]; } } RMQ(); } int main() { int T,Case; int i,l; int up; int x1,y1,x2,y2,lmax,rmin; int t,temp,ans; cin>>T; for(i=1;i<=150;i++) lowbit[i]=i&(-i); for(Case=1;Case<=T;Case++) { if(Case>1) printf("\n"); printf("Case %d:\n",Case); scanf("%d%d%d%d",&n,&m,&q,&s); init(); while(q--) { ans=0; scanf("%d%d%d%d",&x1,&y1,&x2,&y2); for(l=y1;l<=y2;l++) { up=x1; lmax=y1; rmin=y2; for(i=x1;i<=x2;i++) { if(le[i][l]==l+1) {up=i+1;lmax=y1;rmin=y2;continue;} if(lmaxrg[i][l]) rmin=rg[i][l]; temp=query(up,lmax,i,rmin); t=(s-1)*temp+sum[i][rmin]-sum[i][lmax-1]-sum[up-1][rmin]+sum[up-1][lmax-1]; if(ans