#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
int t;
int n,k,q;
int l[N+5];
map<pair<int,int>,int> s;
int r,c;
bool flag;
map<pair<int,int>,bool> dp;
map<pair<int,int>,int> vis;
map<int,bool> res;
map<int,vector<pair<int,int> > > mp;
void solve()
{
s.clear();
dp.clear();
vis.clear();
res.clear();
mp.clear();
cin>>n>>k>>q;
for(int i=1;i<=n;i++)
{
cin>>l[i];
for(int j=1;j<=l[i];j++)
{
cin>>s[{i,j}];
res[s[{i,j}]]=1;
mp[s[{i,j}]].push_back({i,j});
}
}
dp[{0,1}]=1;
vis[{0,1}]=-1;
for(int step=1;step<=100;step++)
{
for(auto iter:res)
{
bool flag=1;
for(auto it:mp[iter.first])
{
if(!flag) break;
/*
dp[{step,iter.first}]
*/
int isf=it.first;
int iss=it.second;
int itf=iter.first;
int x=max(1,iss-k+1);
for(int i=iss-1;i>=x&&flag;i--)
{
if(dp[{step-1,s[{isf,i}]}]&&vis[{step-1,s[{isf,i}]}]!=isf)
{
if(dp[{step,itf}])
{
vis[{step,itf}]=-1;
flag=0;
}
else
{
dp[{step,itf}]=1;
vis[{step,itf}]=isf;
}
}
}
}
}
}
while(q--)
{
flag=0;
cin>>r>>c;
cout<<dp[{r,c}]<<endl;
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
{
solve();
}
return 0;
}
不得不说我代码太史了