#include <bits/stdc++.h>
using namespace std;
const int MAX = 1005;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
long long rand(long long a, long long b) {
  return uniform_int_distribution<long long>(a, b)(rng);
}
const int K = 3;
struct Hash {
  long long a[K];
  Hash() : a() {}
  Hash operator^(const Hash &A) const {
    Hash ans = Hash();
    for (int i = 0; i < K; i++) ans.a[i] = a[i] ^ A.a[i];
    return ans;
  }
  bool operator==(const Hash &A) const {
    for (int i = 0; i < K; i++)
      if (a[i] != A.a[i]) return false;
    return true;
  }
  bool operator<(const Hash &A) const {
    for (int i = 0; i < K; i++)
      if (a[i] != A.a[i]) return a[i] < A.a[i];
    return false;
  }
};
Hash genHash() {
  Hash ret = Hash();
  for (int i = 0; i < K; i++) ret.a[i] = rand(1, 1LL << 60);
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, s, d;
  cin >> n >> s >> d;
  Hash hash[n], sw[s];
  for (int i = 0; i < n; i++) hash[i] = genHash();
  for (int i = 0; i < s; i++) {
    int k;
    cin >> k;
    Hash cur = Hash();
    while (k--) {
      int x;
      cin >> x;
      cur = cur ^ hash[x - 1];
    }
    sw[i] = cur;
  }
  map<Hash, int> left_sz;
  int left = min(s / 2, 13);
  for (int mask = 0; mask < (1 << left); mask++) {
    Hash cur = Hash();
    for (int bit = 0; bit < left; bit++) {
      if (!((mask >> bit) & 1)) continue;
      cur = cur ^ sw[bit];
    }
    if (!left_sz.count(cur))
      left_sz[cur] = __builtin_popcountll(mask);
    else
      left_sz[cur] = min(left_sz[cur], __builtin_popcountll(mask));
  }
  map<Hash, int> right_sz;
  int right = s - left;
  for (int mask = 0; mask < (1 << right); mask++) {
    Hash cur = Hash();
    for (int bit = 0; bit < right; bit++) {
      if (!((mask >> bit) & 1)) continue;
      cur = cur ^ sw[bit + left];
    }
    if (!right_sz.count(cur))
      right_sz[cur] = __builtin_popcountll(mask);
    else
      right_sz[cur] = min(right_sz[cur], __builtin_popcountll(mask));
  }
  while (d--) {
    Hash cur = Hash();
    int sz;
    cin >> sz;
    for (int i = 0; i < sz; i++) {
      int x;
      cin >> x;
      cur = cur ^ hash[x - 1];
    }
    int ans = 100;
    for (auto p : left_sz) {
      Hash tmp = cur ^ p.first;
      if (right_sz.count(tmp)) ans = min(ans, p.second + right_sz[tmp]);
      if (left_sz.count(tmp)) {
        if (tmp == p.first)
          ans = 0;
        else
          ans = min(ans, p.second + left_sz[tmp]);
      }
    }
    cout << (ans == 100 ? -1 : ans) << "\n";
  }
  return 0;
}
