#include<bits/stdc++.h>
using namespace std;
#define N 200010
int T,n,k,q,le[N],ri[N],id[N];
int v[N];
bool f[102][N],g[102][N];
vector<int>c[N];
bool ans[N][102],mp[N];
signed main(){
freopen("chain.in","r",stdin);
freopen("chain.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cin>>T;
while(T--){
for(int i=1;i<=ri[n];i++){
for(int j=1;j<=100;j++){
g[j][i]=0;
f[j][i]=0;
}
}
cin>>n>>k>>q;
for(int i=1;i<=200000;i++){
c[i].clear();
for(int j=1;j<=100;j++){
ans[i][j]=0;
}
}
for(int i=1;i<=n;i++){
int l;
le[i]=ri[i-1]+1;
cin>>l;
ri[i]=le[i]+l-1;
for(int j=le[i];j<=ri[i];j++){
cin>>v[j];
id[j]=i;
c[v[j]].push_back(j);
for(int k=1;k<=100;k++){
g[k][j]=0;
f[k][j]=0;
}
}
}
for(int i=1;i<=n;i++){
int pos=le[i]-1;
for(int j=le[i];j<=ri[i];j++){
if((pos!=(le[i]-1))&&((j-pos)<k)){
f[1][j]=1;
}
if(v[j]==1){
pos=j;
}
}
}
for(int i=1;i<=200000;i++){
for(int j=0;j<c[i].size();j++){
ans[i][1]|=f[1][c[i][j]];
}
}
for(int l=2;l<=100;l++){
for(int i=1;i<=200000;i++){
int sum=0,pos;
for(int j=0;j<c[i].size();j++){
if(f[l-1][c[i][j]]){
if(!mp[id[c[i][j]]]){
sum++;
pos=id[c[i][j]];
mp[id[c[i][j]]]=1;
}
}
}
if(sum>=2){
for(int j=0;j<c[i].size();j++){
g[l-1][c[i][j]]=1;
mp[id[c[i][j]]]=0;
}
}
else{
if(sum==1){
for(int j=0;j<c[i].size();j++){
if(id[c[i][j]]!=pos){
g[l-1][c[i][j]]=1;
}
mp[id[c[i][j]]]=0;
}
}
else{
for(int j=0;j<c[i].size();j++){
mp[id[c[i][j]]]=0;
}
}
}
}
for(int i=1;i<=n;i++){
int pos=le[i]-1;
for(int j=le[i];j<=ri[i];j++){
if((pos!=(le[i]-1))&&((j-pos)<k)){
f[l][j]=1;
}
if(g[l-1][j]==1){
pos=j;
}
}
}
for(int i=1;i<=200000;i++){
for(int j=0;j<c[i].size();j++){
ans[i][l]|=f[l][c[i][j]];
}
}
}
while(q--){
int r,c;
cin>>r>>c;
cout<<ans[c][r]<<'\n';
}
}
return 0;
}