#include<bits/stdc++.h>
using namespace std;
int t,n,k,m,l[200010],a,b,r[200010],ps;
int c[200010],ans[200010];
vector<pair<int,pair<int,int> > > q;
vector<int> v[200010],e[200010],d[200010];
inline void ret(){
for(register int i=1;i<=n;i++){
for(register int j=0;j<l[i];j++){
d[i][j]=0;
int u=v[i][j];
if(r[u]==-1||(r[u]!=0&&r[u]!=i)){
e[i][j]=1;
}
else e[i][j]=0;
}
}
}
inline void rev(){
for(register int i=1;i<=n;i++){
for(register int j=0;j<l[i];j++){
int u=v[i][j],w=e[i][j];
if(j!=l[i]-1){
if(w==1) d[i][j+1]=k-1;
else d[i][j+1]=max(0,d[i][j]-1);
}
}
}
memset(r,0,sizeof(r));
memset(c,0,sizeof(c));
for(register int i=1;i<=n;i++){
for(register int j=0;j<l[i];j++){
int u=v[i][j],w=d[i][j];
if(w>0){
c[u]=1;
if(r[u]==0) r[u]=i;
else if(r[u]!=i) r[u]=-1;
}
}
}
}
int main(){
freopen("chain.in","r",stdin);
freopen("chain.out","w",stdout);
scanf("%d",&t);
while(t--){
n=k=m=a=b=ps;
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
memset(c,0,sizeof(c));
memset(ans,0,sizeof(ans));
q.clear();
scanf("%d%d%d",&n,&k,&m);
for(register int i=1;i<=n;i++){
scanf("%d",&l[i]);
for(register int j=1;j<=l[i];j++){
scanf("%d",&a);
v[i].push_back(a);
e[i].push_back(0);
d[i].push_back(0);
}
}
for(register int i=1;i<=m;i++){
scanf("%d%d",&a,&b);
q.push_back({a,{b,i}});
}
sort(q.begin(),q.end());
memset(r,0,sizeof(r));
r[1]=-1;
for(register int i=1;i<=100;i++){
ret();
rev();
for(register int j=ps;j<m;j++){
int u=q[j].first,v=q[j].second.first,id=q[j].second.second;
if(i!=u) break;
ps++;
if(c[v]==1) ans[id]=1;
else ans[id]=0;
}
}
for(register int i=1;i<=m;i++){
printf("%d\n",ans[i]);
}
for(register int i=0;i<=n+3;i++){
v[i].clear(),e[i].clear(),d[i].clear();
}
}
return 0;
}