#include <bits/stdc++.h>
using namespace std;
template <class C>
void mini(C& a, C b) {
  a = min(a, b);
}
template <class C>
void maxi(C& a, C b) {
  a = max(a, b);
}
const long long mod = 1e9 + 7;
long long myrand() {
  long long res = 0;
  for (int i = 0; i < 62; i++)
    if (rand() % 2) res += (1ll << i);
  return res;
}
void a() {
  int n, s, d;
  cin >> n >> s >> d;
  vector<long long> h(n + 1);
  for (int(i) = 1; i <= n; i++) h[i] = myrand();
  int izq = 0;
  int der = s;
  while (izq * 2 < der) izq++, der--;
  vector<long long> S1(izq), S2(der);
  int c, x;
  for (int i = 0; i < izq; i++) {
    cin >> c;
    while (c--) {
      cin >> x;
      S1[i] ^= h[x];
    }
  }
  for (int i = 0; i < der; i++) {
    cin >> c;
    while (c--) {
      cin >> x;
      S2[i] ^= h[x];
    }
  }
  unordered_map<long long, int> dp1, dp2;
  for (int mask = 0; mask < (1 << izq); mask++) {
    long long hash = 0;
    for (int i = 0; i < izq; i++) {
      if (mask & (1 << i)) hash ^= S1[i];
    }
    if (!dp1.count(hash))
      dp1[hash] = __builtin_popcount(mask);
    else
      mini(dp1[hash], __builtin_popcount(mask));
  }
  for (int mask = 0; mask < (1 << der); mask++) {
    long long hash = 0;
    for (int i = 0; i < der; i++) {
      if (mask & (1 << i)) hash ^= S2[i];
    }
    if (!dp2.count(hash))
      dp2[hash] = __builtin_popcount(mask);
    else
      mini(dp2[hash], __builtin_popcount(mask));
  }
  while (d--) {
    cin >> c;
    long long hash = 0;
    while (c--) {
      cin >> x;
      hash ^= h[x];
    }
    int res = s + 1;
    for (auto it : dp1) {
      if (dp2.count(hash ^ it.first))
        mini(res, it.second + dp2[hash ^ it.first]);
    }
    if (res == s + 1) res = -1;
    cout << res << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  a();
}
