#include <bits/stdc++.h>
#define ii pair<int,int>
#define iiii pair<int,pair<int,pair<int,int>>>
#define iii pair<int,pair<int,int>>
#define fi first
#define se second
using namespace std;
const int N=1e5+6;
int n,m,q;
vector<ii>v[N];
vector<vector<int>>v1;
vector<int>v3[N];
vector<ii>v4[N];
vector<ii>v5[N];
int dp[N];
int a1[N],a2[N],a3[N];
int a4[N],a5[N];
int s;
void dfs(int s1,int pr){
for(auto x:v[s1]){
int node=x.fi;
int s2=x.se;
if(node!=pr){
dp[node]=max(dp[node],dp[s1]+s2);
dfs(node,s1);
}
}
}
vector<ii>f(vector<ii>& a,vector<ii>& b) {
vector<ii>z1;
int i=0,j=0;
while(z1.size()<s && (i<a.size() || j<b.size())){
ii z;
if(i<a.size() && (j==b.size() || a[i].fi>=b[j].fi+1)){
z=a[i++];
}
else{
z={b[j].fi + 1, b[j].se};
j++;
}
if(!a4[z.se]){
a4[z.se] = 1;
z1.push_back(z);
}
}
for(auto &p:z1) a4[p.se]=0;
return z1;
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
cin >>n >>m >>q;
for(int i=1;i<=m;i++){
int x,y;
cin >>x >>y;
v[x].push_back({y,1});
v3[y].push_back(x);
}
s=sqrt(n);
for(int i=1;i<=n;i++){
v5[i].push_back({0,i});
for(auto x:v3[i]){
v5[i]=f(v5[i],v5[x]);
}
}
for(int i=1;i<=q;i++){
int x;
cin >>x;
int y;
cin >>y;
int tong=0;
for(int j=1;j<=y;j++){
cin >> a1[j];
}
if(y>=s){
vector<int>v2;
v2.push_back(i);
v2.push_back(x);
for(int j=1;j<=y;j++){
v2.push_back(a1[j]);
}
v1.push_back(v2);
}
else{
memset(a5,0,sizeof(a5));
for(int j=1;j<=y;j++){
a5[a1[j]]=1;
}
for(auto x1:v5[x]){
if(a5[x1.se]==0){
tong=max(tong,x1.fi);
}
}
a3[i]=tong;
}
}
for(auto x:v1){
int s1=x[0];
int s2=x[1];
dp[s2]=0;
memset(a2,0,sizeof(a2));
for(int j=2;j<x.size();j++){
a2[x[j]]=1;
}
for(int i=1;i<=n;i++){
dp[i]=0;
}
for(int i=1;i<=n;i++){
if(a2[i]==0){
dfs(i,-1);
}
}
a3[s1]=dp[s2];
}
for(int i=1;i<=q;i++){
cout << (a3[i]==0?-1:a3[i]) << "\n";
}
return 0;
}
/*
5 6 3
1 2
2 4
3 4
1 3
3 5
4 5
4 1 1
5 2 2 3
2 3 1 4 5
*/