#include using namespace std; #define REP(i,n) for(int i(0); i < (n); ++i) #define rep(i,a,b) for(int i(a); i <= (b); ++i) #define dec(i,a,b) for(int i(a); i >= (b); --i) #define for_edge(i,x) for(int i = H[x]; i; i = X[i]) #define LL long long #define ULL unsigned long long #define MP make_pair #define PB push_back #define FI first #define SE second #define INF 1 << 30 const int N = 1000000 + 10; const int M = 10000 + 10; const int Q = 1000 + 10; const int A = 30 + 1; 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[1000001],y[1000001]; 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 T; int r[N], c[N]; int xx1, yy1; int main(){ #ifndef ONLINE_JUDGE freopen("test.txt", "r", stdin); freopen("test.out", "w", stdout); #endif scanf("%d", &T); while (T--){ Init(); memset(r, 0, sizeof r); memset(c, 0, sizeof c); xx1 = yy1 = 0; rep(i, 1, k) r[x[i]] = 1, c[y[i]] = 1; rep(i, 1, n) if (r[i] == 0) ++xx1; rep(i, 1, m) if (c[i] == 0) ++yy1; printf("%d %d\n", xx1, yy1); } return 0; }