#include <bits/stdc++.h>
using namespace std;
#define int long long
void dbg(){cout<<"\033[0m";}
template<typename T,typename... args>
void dbg(T f,args... a){cout<<"\033[95m"<<f;dbg(a...);}
#define dbg(...)
int n,m,q;
const int K = 105;
vector<int> back[(int)1e5+5];
int dp[(int)1e5+5];
// store up to K longest path to any node.
vector<pair<int,int>> path[(int)1e5+5];
signed main(){
cin.tie(nullptr)->sync_with_stdio(0);
cin>>n>>m>>q;
for(int i=1;i<=m;i++){
int u,v;cin>>u>>v;
back[v].push_back(u);
}
for(int i=1;i<=n;i++){
vector<pair<int,int>> temp;
temp.push_back({0ll,i});
for(int v:back[i]){
for(auto g:path[v]){
temp.push_back({g.first+1,g.second});
}
}
sort(temp.rbegin(),temp.rend());
set<int> check;
for(auto &[s,u]:temp){
if(check.find(u) != check.end())continue;
path[i].push_back({s,u});
check.insert(u);
}
if(path[i].size() > K)path[i].resize(K);
}
while(q--){
int T,Y;cin>>T>>Y;
set<int> NO;
for(int i=1;i<=Y;i++){
int x;cin>>x;NO.insert(x);
}
int ans = -1;
if(Y>=K){
fill(dp+1,dp+1+T,-1);
dp[T] = 0;
for(int i=T;i>=1;i--){
int ok = (NO.find(i) == NO.end());
if(dp[i]==-1)continue;
if(ok)ans = max(ans,dp[i]);
for(int v:back[i])dp[v] = max(dp[v],dp[i]+1);
}
}
else{
for(auto x:path[T]){
if(NO.find(x.second) == NO.end()){
ans = x.first;
break;
}
}
}
cout<<ans<<'\n';
}
return 0;
}