#include #include using namespace std; const int _K=50268147,_B=6082187,_P=100000007; int _X; inline int get_rand(int _l,int _r){ _X=((long long)_K*_X+_B)%_P; return _X%(_r-_l+1)+_l; } int n,m,k,seed; int x[1000006],y[1000006]; void Init(){ scanf("%d%d%d%d",&n,&m,&k,&seed); _X=seed; for (int i=1;i<=k;++i) x[i]=get_rand(1,n), y[i]=get_rand(1,m); } int cntx[1000006],cnty[1000006]; int main(){ int t; cin>>t; while(t--){ Init(); memset(cntx,0,sizeof(cntx)); memset(cnty,0,sizeof(cnty)); int ansx=n,ansy=m; for(int i=1;i<=k;i++){ if(cntx[x[i]]==0) ansx--; if(cnty[y[i]]==0) ansy--; cntx[x[i]]=1; cnty[y[i]]=1; } cout<