#include<iostream>
#include<vector>
using namespace std;
const int N=2e5+5;
const int M=100;//最大轮数
void solve()
{
int n,k,q;
cin>>n>>k>>q;
vector<vector<int>>dp(M+1,vector<int>(N,-1));//打表
vector<vector<int>>s(n+1);//选手卡牌
for(int i=1;i<=n;i++)//输入
{
int len;
cin>>len;
for(int j=1;j<=len;j++)
{
int v;
cin>>v;
s[i].push_back(v);
}
}
dp[0][1]=-2;
for(int cnt=1;cnt<=M;cnt++)//最大轮数
{
for(int i=1;i<=n;i++)//n个人
{
int lst=-1;//last
for(int j=0;j<s[i].size();j++)//第i个人的s[i].size()
{
int x=s[i][j];
if(lst!=-1&&(j-lst+1<=k))
{
if(dp[cnt-1][s[i][lst]]!=-1&&dp[cnt-1][s[i][lst]])//达标内容,如果多解为-2,无解-1,否则为那个人的编号
{
if(dp[cnt][x]==-1)
{
dp[cnt][x]=i;
}
else if(dp[cnt][x]!=i)
{
dp[cnt][x]=-2;
}
}
}
int v=dp[cnt-1][x];//进入到下一轮打表
if(v!=-1&&v!=i)
{
lst=j;
}
}
}
}
while(q--)
{
int r,c;
cin>>r>>c;
if(dp[r][c]!=-1)//输出
{
cout<<1<<endl;
}
else
{
cout<<0<<endl;
}
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
solve();//封装成函数
}
return 0;
}