#include <bits/stdc++.h>
using namespace std;
const int mod=998244353,I2=mod/2+1;
unsigned long long rd(unsigned long long &x) {
	x ^= (x << 13);
	x ^= (x >> 7);
	x ^= (x << 17);
	return x;
}
long long rem[15];
struct mat {
	int E[155][155],n,m;
	mat(){memset(E,0,sizeof E);}
	mat operator *(const mat &a)const {
		mat res;res.n=n,res.m=a.m;
		memset(res.E,0,sizeof res.E);
		for(int i=1;i<=m;i++)
			for(int j=1;j<=n;j++)
				if(E[j][i])for(int k=1;k<=res.m;k++)if(a.E[i][k]){
					(res.E[j][k]+=1ll*E[j][i]*a.E[i][k]%mod);
					(res.E[j][k]>=mod)&&(res.E[j][k]-=mod);
				}
		return res;
	}
}A[65];
int main() {
	freopen("noodle.in","r",stdin);
	freopen("noodle.out","w",stdout);
	memset(rem,-1,sizeof rem);
	int test, T;
	unsigned long long seed;
	scanf("%d%d%llu", &test, &T, &seed);
	for(int Case = 1; Case <= T; Case ++) {
		int n, q, x;
		long long k_max;
		scanf("%d%d%d%lld", &n, &q, &x, &k_max);
		vector<int> a(n + 1),b(n+1),c(n+1);
		for(int i = 1; i <= n; i ++) {
			scanf("%d", &a[i]);
		}
		if(n<=150&&q<=150){
			for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)A[0].E[i][j]=0;
			for(int i=1;i<=n;i++)A[0].E[i+1>>1][i]=A[0].E[n-(i+1>>1)+1][i]=I2;
			A[0].n=A[0].m=n;
			for(int i=1;i<=62;i++)A[i]=A[i-1]*A[i-1];
		}
		long long ans=0;
		for(int i = 1; i <= q; i ++) {
			for(int j=1;j<=n;j++)b[j]=a[j];
			long long k = rd(seed) % k_max;
			if(!k){
				ans^=(1ll*a[x]*i);
				continue;
			}
			if(k_max<=10&&rem[k]!=-1){
				ans^=rem[k];
				continue;
			}
			if(n<=150&&q<=150){
				mat res;res.n=1,res.m=n;
				for(int j=1;j<=n;j++)res.E[1][j]=a[j];
				for(int j=0;j<=62;j++)if(k>>j&1)res=res*A[j];
				ans^=(1ll*res.E[1][x]*i);
				continue;
			}
			/*
			Code your solution here.
			*/
			int cnt=0;
			while(++cnt){
				bool f=1;
				for(int j=1;j<=n;j++){
					c[j]=1ll*I2*(b[j+1>>1]+b[n-(j+1>>1)+1])%mod;
					if(b[j]!=c[j])f=0;
				}
				for(int j=1;j<=n;j++)b[j]=c[j];
				if(f||cnt==k){
					ans^=(1ll*c[x]*i);
					if(k_max<=10)rem[k]=1ll*c[x]*i;
					break;
				}
//				printf("cnt=%d,k=%lld\n",cnt,k);
			}
		}
		printf("%lld\n",ans);
	}
}
