#include using namespace std; typedef long long ll; typedef double lf; typedef pair pii; typedef pair pll; #define TRACE(x) cerr << #x << ' ' << x << endl #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define REP(i, n) FOR(i, 0, n) #define _ << ' ' << #define fi first #define sec second #define se second #define mp make_pair #define pb push_back const int MAXN = 100100; const int K = 250; int n, m, q; vector v[MAXN]; vector nv[MAXN]; int veliki[MAXN]; int par[MAXN]; int bio[MAXN]; int find(int x) { if (par[x] == x) return x; return par[x] = find(par[x]); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m >> q; REP(i, m) { int a, b; cin >> a >> b; v[a].pb(b); v[b].pb(a); } REP(i, n + 1) { if (v[i].size() >= K) veliki[i] = 1; } REP(i, n + 1) { for (auto x : v[i]) { if (!veliki[i]) nv[i].pb(x); else { if (veliki[x]) nv[i].pb(x); } } } REP(i, MAXN) par[i] = i; REP(QQ, q) { int x; cin >> x; vector kveri; REP(i, x) { int y; cin >> y; kveri.pb(y); bio[y] = 1; } for (auto cvor : kveri) { for (auto ncvor : nv[cvor]) { if (!bio[ncvor]) continue; int a = find(cvor); int b = find(ncvor); par[a] = b; } } int sol = 0; for (auto cvor : kveri) sol += (find(cvor) == cvor); cout << sol << endl; for (auto t : kveri) { bio[t] = 0; par[t] = t; } } return 0; }