#include<bits/stdc++.h>
using namespace std;
int read(){
int t;
int f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
f=-f;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
t=(t<<1)+(t<<3)+(ch^48);
ch=getchar();
}
return t*f;
}
const int N=2e5+10;
bitset < N > f[101];
vector < int > a[N];
vector < int > flag[N];
int book[N],n,k,q,t,len[N],x,y;
int main(){
t=read();
while(t--){
n=read(); k=read(); q=read();
for(int i=1;i<=n;i++){
len[i]=read();
cout<<"len is OK\n";
for(int j=1;j<=len[i];j++){
a[i].push_back(read());
if(a[i][j]==1){
flag[i][j]=1;
}
else{
flag[i][j]=0;
}
}
}
for(int l=1;l<=100;l++){
for(int i=1;i<N;i++){
book[i]=0;
f[l][i]=false;
}
for(int i=1;i<=n;i++){
int pre=-k;
for(int j=1;j<=len[i];j++){
if(j-pre+1<=k){
int value=a[i][j];
if(!book[value]){
book[value]=i;
}
else if(book[value]!=i){
book[value]=-1;
}
f[l][value]=0;
}
if(flag[i][j]){
pre=j;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<len[i];j++){
int value=a[i][j];
if(book[value]!=0&&book[value]!=i){
flag[i][j]=1;
}
else{
flag[i][j]=0;
}
}
}
}
for(int i=1;i<=q;i++){
cin>>x>>y;
if(f[x][y]){
cout<<1<<'\n';
}
else{
cout<<0<<'\n';
}
}
}
}