#include <bits/stdc++.h>
using namespace std;
const int SQRT = 300;
int N, M, Q;
int iter, I[100001];
int DIST[100001];
pair <int, int> DP[SQRT + 1][100001];
vector <int> VG[100001];
int BFS(int node)
{
int ret = -1;
for(int i = 1; i <= node; i++) DIST[i] = 0;
for(int i = node; i >= 1; i--)
{
if(!DIST[i] && (i < node)) continue;
for(int x : VG[i]) DIST[x] = max(DIST[i] + 1, DIST[x]);
if(I[i] < iter) ret = max(DIST[i], ret);
}
return ret;
}
int main()
{
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> N >> M >> Q;
int u, v;
while(M--)
{
cin >> u >> v;
VG[v].push_back(u);
}
for(int i = 1; i <= N; i++)
{
// cout << i << ":\n";
priority_queue <array <int, 4>> H;
H.push({0, i, i, 1});
for(int x : VG[i]) H.push({DP[1][x].first + 1, DP[1][x].second, x, 1});
for(int j = 1; j <= SQRT; j++)
{
if(!H.size()) break;
int a = H.top()[0], b = H.top()[1], c = H.top()[2], d = H.top()[3];
H.pop();
DP[j][i] = {a, b};
// cout << j << ": " << a << ' ' << b << '\n';
if((c < i) && (d < SQRT) && (DP[d + 1][c].second)) H.push({DP[d + 1][c].first + 1, DP[d + 1][c].second, c, d + 1});
}
}
int t, n, s;
while(Q--)
{
iter++;
cin >> t >> n;
for(int i = 1; i <= n; i++) {cin >> s; I[s] = iter;}
if(n >= SQRT) {cout << BFS(t) << '\n'; continue;}
bool flag = false;
for(int i = 1; (i <= SQRT) && DP[i][t].second && !flag; i++) if(I[DP[i][t].second] < iter) {cout << DP[i][t].first << '\n'; flag = true;}
if(!flag) cout << "-1\n";
}
return 0;
}