#include<bits/stdc++.h>
using namespace std;
const int N=5e3+10,M=5e5+10;
int T,n,k[M],q,ans,a[N],b[N],as[N<<1],used[N];
map<int,int>mp;
void solve()
{
	mp.clear();
	ans=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	scanf("%d",&q);
	for(int i=1;i<=q;i++)scanf("%d",&k[i]);
	sort(k+1,k+q+1);
	for(int x=0;x<=2*n;x++)
	{
		memset(used,0,sizeof(int)*(n+5));
		for(int i=1;i<=n;i++)
		{
			if(a[i]<x-a[i])
			{
				if(a[i]<=n&&!used[a[i]])
				{
					used[a[i]]=1;
				}
				else if(x-a[i]<=n)used[x-a[i]]=1;
			}
			else
			{
				if(x-a[i]>=0&&x-a[i]<=n&&!used[x-a[i]])
				{
					used[x-a[i]]=1;
				}
				else if(a[i]<=n)used[a[i]]=1;
			}
		}
		int mex=0;
		for(int i=0;i<=n;i++)
			if(!used[i])
			{
				mex=i;
				break;
			}
		as[x]=mex;
	}
	sort(a+1,a+n+1);
	for(int i=0;i<=n;i++) used[i]=0;
	for(int i=1;i<=n;i++) if(a[i]<n) used[a[i]]=1;
	int m=0;
	for(int i=0;i<=n;i++) if(!used[i]) b[++m]=i;
	for(int i=0;i<=n;i++) used[i]=0;
	for(int t=1,l=1,r=0;t<=q;t++)
	{
		if(k[t]<=2*n)ans^=as[k[t]];
		else
		{
			if(mp[k[t]])
			{
				ans^=mp[k[t]]-1;
				continue;
			}
			while(r<n&&a[r+1]<=k[t])r++;
			while(l<=n&&a[l]<k[t]-n)l++;
			for(int i=l;i<=r;i++) used[k[t]-a[i]]=1;
			for(int i=1;i<=m;i++) 
				if(!used[b[i]])
				{
					mp[k[t]]=b[i]+1;
					ans^=b[i];
					break;
				}
			for(int i=l;i<=r;i++) used[k[t]-a[i]]=0;
		}
	}
	cout<<ans<<'\n';
	return;
}
int main()
{
//	freopen("K.in","r",stdin);
//	freopen("K.out","w",stdout);
	scanf("%d",&T);
	while(T--)solve();
	return 0;
}
