#include <bits/stdc++.h>
#define int long long
int RANGE=300;
int n,m,q;
int height[100010];
std::vector<std::pair<int,int>> dpV[100010];
std::vector<std::pair<int,int>> dpVn[100010];
int dp[100010];
int tempDp[100010];
std::vector<int> adj[100010];
std::vector<int> rev[100010];
std::vector<int> order;
bool visit[100010];
void dfs(int curr){
if(visit[curr])return;
visit[curr]=true;
for(auto to:adj[curr]){
dfs(to);
}
order.push_back(curr);
return;
}
signed main(){
std::cin >> n >> m >> q;
RANGE=200;
for(int i=0;i<m;i++){
int s,e;
std::cin >> s >> e;
adj[s].push_back(e);
rev[e].push_back(s);
}
for(int i=1;i<=n;i++){
dfs(i);
}
std::reverse(order.begin(),order.end());
for(int i=1;i<=n;i++){
while(dpV[i].size()<RANGE){
int best=-1,idx=-1;
for(int k=0;k<rev[i].size();k++){
if(dpVn[rev[i][k]].empty())continue;
if(dpVn[rev[i][k]].back().first>best){
idx=k;
best=dpVn[rev[i][k]].back().first;
}
}
if(best==-1)break;
dpV[i].push_back({dpVn[rev[i][idx]].back().first+1,dpVn[rev[i][idx]].back().second});
dpVn[rev[i][idx]].pop_back();
}
if(dpV[i].size()<RANGE)dpV[i].push_back({0,i});
std::reverse(dpV[i].begin(),dpV[i].end());
dpVn[i]=dpV[i];
for(auto from:rev[i]){
dpVn[from]=dpV[from];
}
}
for(int i=1;i<=n;i++){
std::reverse(dpV[i].begin(),dpV[i].end());
// for(auto [num,from]:dpV[i]){
// std::cout << num << ' ' << from << '|';
// }
// std::cout << '\n';
}
while(q--){
int t,y;
std::vector<int> absent;
std::cin >> t >> y;
for(int i=0;i<y;i++){
int yin;
std::cin >> yin;
absent.push_back(yin);
}
int ans=-1;
for(auto [num,from]:dpV[t]){
auto itr = std::lower_bound(absent.begin(),absent.end(),from);
if(itr==absent.end()||*itr!=from){
ans = num;
break;
}
}
if(ans!=-1){
std::cout << ans << '\n';
continue;
}
for(int i=1;i<=n;i++){
auto itr = std::lower_bound(absent.begin(),absent.end(),i);
if(itr==absent.end()||*itr!=i)
tempDp[i]=0;
else
tempDp[i]=-1e9;
}
for(auto curr:order){
for(auto to:adj[curr]){
tempDp[to]=std::max(tempDp[to],tempDp[curr]+1);
}
}
tempDp[t]=std::max((int)(-1),tempDp[t]);
std::cout << tempDp[t] << '\n';
}
}