/*
复杂度均摊:
如果M>sqrt(N),这种询问最多sqrt(N)组,直接把所有边扫一遍求联通块即可
如果M<sqrt(N),直接两两枚举点判边,复杂度M^2,总复杂度N/M*M^2=NM
*/
#include<bits/stdc++.h>
using namespace std;
#define N 100005
vector<pair<int,int>>e;
set<pair<int,int> >s;
int n,E,P,a[N],F[N],id[N];
int find(int x){
return F[x]==x?x:F[x]=find(F[x]);
}
int main(){
//freopen("140.in","r",stdin);
cin>>n>>E>>P;
for(int i=1;i<=E;i++){
int u,v;scanf("%d%d",&u,&v);
if(u>v)swap(u,v);
e.push_back(make_pair(u,v));
s.insert(make_pair(u,v));
}
while(P--){
int m;scanf("%d",&m);
for(int i=1;i<=m;i++)scanf("%d",&a[i]);
sort(a+1,a+1+m);
for(int i=1;i<=m;i++)F[i]=i,id[a[i]]=i;
if(m<=sqrt(n)){
for(int i=1;i<=m;i++)
for(int j=i+1;j<=m;j++)
if(s.find(make_pair(a[i],a[j]))!=s.end()){
int fu=find(i),fv=find(j);
if(fu!=fv)F[fu]=fv;
}
}else {
for(auto p:e)if(id[p.first] && id[p.second]){
int fu=find(id[p.first]),fv=find(id[p.second]);
if(fu!=fv)F[fu]=fv;
}
}
int ans=0;
for(int i=1;i<=m;i++)if(F[i]==i)ans++;
for(int i=1;i<=m;i++)id[a[i]]=0;
cout<<ans<<'\n';
}
}