#include <bits/stdc++.h>
using namespace std;
const int Max_N=2e6,Mod=998244353,MN=500;
bool Be;
int n,Inv=Mod-Mod/2,a[Max_N+5],A[510];
int f[MN+5],g[MN+5][MN+5],r[MN+5],res[MN+5][MN+5];
bool Ed;
unsigned long long rd(unsigned long long &x) {
	x ^= (x << 13);
	x ^= (x >> 7);
	x ^= (x << 17);
	return x;
}
int Read(){
	int num=0; char ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar());
	for(;ch>='0'&&ch<='9';num=num*10+ch-'0',ch=getchar());
	return num;
}
void Print(long long x){
	if(x>=10) Print(x/10);
	putchar((x%10)+'0');
}
void Add(int &x,int y){ x+=y; x<Mod?:x-=Mod; }
int Ask(int n,int x,int m){
	for(int i=1;i<=n;i++) f[i]=a[i];
	for(int i=1;i<=n;i++)
	 for(int j=1;j<=n;j++)
	  g[i][j]=0;
	for(int i=1;i<=n;i++)
	 Add(g[(i+1)>>1][i],Inv),
	 Add(g[n-((i+1)>>1)+1][i],Inv);
	for(;m;m>>=1){
		if(m&1){
			for(int i=1;i<=n;i++)
			 for(int j=1;j<=n;j++)
			  Add(r[j],1ll*f[i]*g[i][j]%Mod);
			for(int i=1;i<=n;i++) f[i]=r[i],r[i]=0;
		}
		for(int i=1;i<=n;i++)
		 for(int j=1;j<=n;j++)
		  for(int k=1;k<=n;k++)
		   Add(res[i][k],1ll*g[i][j]*g[j][k]%Mod);
		for(int i=1;i<=n;i++)
		 for(int j=1;j<=n;j++)
		  g[i][j]=res[i][j],res[i][j]=0;
	}
	return f[x];
}
int main(){
//	cerr<<(int)((&Ed-&Be)/1024.0/1024.0)<<endl;
	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 ++) {
		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++) a[i]=Read();
		long long ans=0; int B=1;
		for(;B<n;B<<=1);
		if(test<=3){	
			int m=n>>1; long long Mx=k_max;
			A[0]=a[x];
			for(int t=1;t<=k_max;t++){
				for(int i=1;i<=m;i++) Add(a[i],a[n-i+1]);
				for(int i=n;i>=1;i--) a[i]=1ll*a[(i+1)>>1]*Inv%Mod;
				int flg=0;
				for(int i=2;i<=n;i++) if(a[i]!=a[i-1]) flg=1;
				A[t]=a[x]; Mx=t;
				if(!flg) break;
			}
			for(int i=1;i<=q;i++){
				long long k=rd(seed)%k_max;
				ans^=1ll*i*A[min(Mx,k)];
			}
		} else {
			for(int i=1;i<=q;i++){
				long long k=rd(seed)%k_max;
				ans^=1ll*i*Ask(n,x,k);
			}
		}
		Print(ans),puts("");
	}
	return 0;
}
