#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl '\n'
const int N = 1e5 + 5 , B = 320;
vector<int> adj[N];
vector<pair<int,int>> dp[N];
vector<pair<int,int>> solve(int node){
if(dp[node].size()) return dp[node];
map<int,int> mp;
mp[node] = 0;
for(auto ch : adj[node]){
vector<pair<int,int>> ret = solve(ch);
for(auto [d,x] : ret) mp[x] = max(mp[x] , d + 1);
}
for(auto [u,x] : mp){
dp[node].push_back({x,u});
}
sort(dp[node].rbegin(),dp[node].rend());
while(dp[node].size() > B+1) dp[node].pop_back();
return dp[node];
}
bool mark[N];
int dp2[N];
int solve2(int node){
int &ret = dp2[node];
if(ret != -1) return dp2[node];
ret = (mark[node] ? -1e9 : 0);
for(auto ch : adj[node]){
ret = max(ret , solve2(ch) + 1);
}
return ret;
}
void solve(){
int n,m,q;
cin>>n>>m>>q;
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
adj[b].push_back(a);
}
while(q--){
int node,sz;
cin>>node>>sz;
vector<int> v(sz);
for(auto &i:v) cin>>i;
if(0){
map<int,bool> blocked;
for(auto i : v) blocked[i] = 1;
for(auto [d,x] : solve(node)){
if(blocked.count(x)) continue;
cout<<d<<endl;
break;
}
cout<<-1<<endl;
}
else {
memset(dp2,-1,sizeof(dp2));
for(auto i : v) mark[i] = 1;
cout<<(solve2(node)<0?-1:solve2(node))<<endl;
for(auto i : v) mark[i] = 0;
}
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t=1;
//cin>>t;
while(t--){
solve();
}
return 0;
}