#include<bits/stdc++.h>
using namespace std;
#define rep(i,s,t) for (int i=s;i<=t;i++)
#define pi acos(-1)
typedef long long LL;
typedef pair<int,int> PII;
typedef pair<double, double> PDD;
typedef pair<PII, PII> PPP;
typedef pair<PII, int> PPI;
#define repp(i,s,t) for (int i=s;i>=t;i--)
template<class T> T sqr(T x) {return x*x;}
#define debug(x) cerr<<#x"="<<(x)<<endl;
#define pb(x) push_back(x);
#define ori(x) x-'a'
const int maxn = 50100;
bitset<maxn> tree[6][300];
bitset<maxn> ans[6];
bitset<maxn> fin;
int t[10];
int n,m,x,y,q;
PII a[6][maxn];
int lefts[1001], rights[1001];
int main()
{
	int testdata;
	scanf("%d",&testdata);
	while (testdata--)
	{
		scanf("%d%d", &n, &m);
		rep(i,1,n)
		{
			rep(k,1,5) 
			{
				scanf("%d",&a[k][i].first);
				a[k][i].second = i;
			}
		}
		rep(k,1,5) sort(a[k]+1, a[k]+1+n);
		int gao = int(sqrt(n)) + 1;
		int num = n / gao;
		if (n % gao) num++;
		int temp = 1;
		rep(i,1,num)
		{
			lefts[i] = temp;
			rights[i] = temp + gao - 1;
			temp = temp + gao;
		}
		rights[num] = n;
		rep(k,1,5)
			rep(i,1,num)
			{
				tree[k][i] = tree[k][i-1];
				rep(j,lefts[i],rights[i])
					tree[k][i][a[k][j].second] = 1;
			}
		int lastans = 0;
		scanf("%d",&q);
		while (q--)
		{
			rep(i,1,5) 
			{
				scanf("%d",&t[i]);
				t[i] ^= lastans;
				ans[i].reset();
			}
			rep(k,1,5)
			{
				int ll = 1;
				int rr = n;
				int ret = 0;
				while (ll <= rr)
				{
					int mid = (ll + rr) >> 1;
					if (a[k][mid].first <= t[k])
					{
						ret = mid;
						ll = mid + 1;
					} else rr = mid - 1;
				}
				
				ll = 1;
				rr = num;
				int ret2 = 0;
				while (ll <= rr)
				{
					int mid = (ll + rr) >> 1;
					if (ret >= rights[mid])
					{
						ret2 = mid;
						ll = mid + 1;
					} else rr = mid - 1;
				}
				ans[k] = tree[k][ret2];
				rep(i,rights[ret2]+1,ret) ans[k][a[k][i].second] = 1;
				(k==1)?fin = ans[k]:fin &= ans[k];
			}
			lastans = fin.count();
			printf("%d\n", lastans);
		}
	}
}

