#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
bool ch[100100];
void merge(vector<pii> &a,vector<pii> &b){
vector<pii> tmp;
int i=0,j=0;
while(i<a.size()&&j<b.size()&&tmp.size()<330){
if(ch[a[i].second]){
i++;
continue;
}
if(ch[b[j].second]){
j++;
continue;
}
if(a[i].first>b[j].first+1) tmp.push_back(a[i]),ch[a[i++].second]=1;
else tmp.push_back({b[j].first+1,b[j].second}),ch[b[j++].second]=1;
}
while(i<a.size()&&tmp.size()<330){
if(ch[a[i].second]){
i++;
continue;
}
tmp.push_back(a[i]),ch[a[i++].second]=1;
}
while(j<b.size()&&tmp.size()<330){
if(ch[b[j].second]){
j++;
continue;
}
tmp.push_back({b[j].first+1,b[j].second}),ch[b[j++].second]=1;
}
a=tmp;
for(auto x:a) ch[x.second]=0;
}
int main(){
cin.tie(0)->sync_with_stdio(0);
int n,m,q;cin>>n>>m>>q;
vector<vector<int>> rev(n+1);
vector<vector<pii>> mst(n+1);
vector<int> dp(n+1,0);
while(m--){
int u,v;cin>>u>>v;
rev[v].push_back(u);
}
for(int i=1;i<=n;i++){
mst[i].push_back({0,i});
for(int x:rev[i]){
dp[i]=max(dp[i],dp[x]+1);
mst[i].push_back({1,x});
merge(mst[i],mst[x]);
}
}
vector<int> ch(n+1);
while(q--){
int t,N;cin>>t>>N;
vector<int> tmp;
for(int i=0;i<N;i++){
int x;cin>>x;
tmp.push_back(x);
ch[x]=1;
}
for(auto x:mst[t]){
if(!ch[x.second]){
cout<<x.first<<'\n';
goto nx;
}
}
for(int i=1;i<=t;i++){
dp[i]=0;
if(ch[i]){
dp[i]=-1;
continue;
}
for(int x:rev[i]){
if(dp[x]==-1) continue;
dp[i]=max(dp[i],dp[x]+1);
}
}
cout<<dp[t]<<'\n';
nx:;
for(int x:tmp) ch[x]=0;
tmp.clear();
}
}