#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
using namespace std;
const int Nmax = 1e5 + 5, Mmax = 2e5 + 5, Qmax = 1e5 + 5, S = 100;
int n, m, q;
bool busy[Nmax], used_node[Nmax];
vector<int> way[Nmax], rway[Nmax];
vector<pii> path[Nmax];
int dfs(int u, int lenght) {
int Max = lenght;
for(int v: rway[u]){
int d = dfs(v, lenght + 1);
if(!busy[v]){
Max = max(Max, d);
}
}
return Max;
}
void solve(){
for(int i = 1; i <= n; i++){
path[i].push_back({0, i});
}
for(int u = 1; u <= n; u++){
for(int v: way[u]){
auto &pv = path[v];
for(auto [len, start]: path[u]){
pv.push_back({len + 1, start});
}
sort(pv.begin(), pv.end(), greater<pii>());
vector<pii> newlist;
for(auto [len, start]: pv){
if(!used_node[start]) {
newlist.push_back({len, start});
used_node[start] = true;
}
if(newlist.size() == S) break;
}
for(auto [len, start]: newlist){
used_node[start] = false;
}
pv = newlist;
}
}
}
void enter(){
cin >> n >> m >> q;
int u, v, t, y, c;
for(int i = 0; i < m; i++){
cin >> u >> v;
way[u].push_back(v);
rway[v].push_back(u);
}
solve();
for(int i = 0; i < q; i++){
cin >> t >> y;
memset(busy, false, sizeof(busy));
vector<int> c(y);
for(int j = 0; j < y; j++){
cin >> c[j];
busy[c[j]] = true;
}
if(y >= S){
int ans = dfs(t, 0);
if(ans == 0 && busy[t]) cout << -1 << '\n';
else cout << ans << '\n';
}
else {
bool fail = true;
for(auto [len, start]: path[t]){
if(!busy[start]){
fail = false;
cout << len << '\n';
break;
}
}
if(fail) cout << -1 << '\n';
}
for(int j = 0; j < y; j++){
busy[c[j]] = false;
}
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
enter();
}