#include<bits/stdc++.h>
#define For(i,j,k) for(int i=(j);i<=(k);i++)
#define foR(i,j,k) for(int i=(j);i>=(k);i--)
#define vi vector<int>
#define mst(a,b) memset(a,b,sizeof(a))
#define SZ(x) ((int)x.size())
using namespace std;
int read() { int x; scanf("%d",&x); return x; }
const int P=998244353;
int add(int x,int y) { return (x+y)%P; }
int sub(int x,int y) { return (x-y+P)%P; }
int mul(int x,int y) { return 1ull*x*y%P; }
void mulmod(int &x,int y) {x=mul(x,y); }
void submod(int &x,int y) {x=sub(x,y); }
void addmod(int &x,int y) {x=add(x,y); }
int ksm(int x,int y) { int ans=1; for(;y;y>>=1) { if(y&1) ans=mul(ans,x); x=mul(x,x); } return ans; }
int inv(int x) { return ksm(x,P-2); }
void fprint(int *a,int n) { For(i,1,n) fprintf(stderr,"%d ",a[i]); fprintf(stderr,"\n"); }
const int MN=2e6+5,inv2=(P+1)/2;
int n,q,x,a[MN],b[MN],ans[100];
#define ll long long
unsigned long long rd(unsigned long long &x) {
	x ^= (x << 13);
	x ^= (x >> 7);
	x ^= (x << 17);
	return x;
}

int main() {
	
	freopen("noodle.in","r",stdin);
	freopen("noodle.out","w",stdout);
	int test, T;
	unsigned long long seed;
	scanf("%d%d%llu", &test, &T, &seed);
	
	for(int Case = 1; Case <= T; Case ++) {
		cerr<<"?";
		int n, q, x; long long k_max;
		scanf("%d%d%d%lld", &n, &q, &x, &k_max);
		
		for(int i = 1; i <= n; i ++) {
			scanf("%d", &a[i]);
		}
		ans[0]=a[x];
		For(i,1,min((ll)24,k_max)) {
			For(j,1,n/2) b[j]=a[j]+a[n-j+1];
			For(j,1,n) a[j]=mul(inv2,b[(j+1)/2]);
			ans[i]=a[x];
		}
		ll fans=0;
		for(int i = 1; i <= q; i ++) {
			long long k = rd(seed) % k_max;
			fans^=1ll*ans[min((ll)24,k)]*i;
		}
		printf("%lld\n",fans);
	}
}
