#include <bits/stdc++.h>
using namespace std;
template <class T>
void print(T& x) {
  cout << x;
}
template <class T, class U>
void print(pair<T, U>& p) {
  cout << "(";
  print(p.first);
  cout << ", ";
  print(p.second);
  cout << ")";
}
template <class T>
void print(vector<T>& v) {
  cout << "{";
  if (((int)(v).size())) print(v[0]);
  for (int i = 1; i < ((int)(v).size()); i++) cout << ", ", print(v[i]);
  cout << "}\n";
}
int N, S, D;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> N >> S >> D;
  vector<bitset<1000>> A(S);
  for (int i = 0; i < S; i++) {
    int c, x;
    cin >> c;
    for (int j = 0; j < c; j++) {
      cin >> x;
      x--;
      A[i].set(x);
    }
  }
  unordered_map<bitset<1000>, int> M;
  int fstCnt = S - S / 3;
  for (int m = 0; m < 1 << (fstCnt); m++) {
    bitset<1000> cur;
    for (int i = 0; i < fstCnt; i++) {
      if ((m >> i) & 1) {
        cur ^= A[i];
      }
    }
    if (M.count(cur)) {
      M[cur] = min(M[cur], __builtin_popcount(m));
    } else
      M[cur] = __builtin_popcount(m);
  }
  vector<pair<bitset<1000>, int>> Z;
  for (int m = 0; m < 1 << (S - fstCnt); m++) {
    bitset<1000> cur;
    for (int i = 0; i < S - fstCnt; i++) {
      if ((m >> i) & 1) {
        cur ^= A[fstCnt + i];
      }
    }
    Z.emplace_back(cur, __builtin_popcount(m));
  }
  for (int d = 0; d < D; d++) {
    int bst = 1e9;
    bitset<1000> cur;
    int c, x;
    cin >> c;
    for (int i = 0; i < c; i++) {
      cin >> x;
      x--;
      cur.set(x);
    }
    for (auto [bs, cnt] : Z) {
      bitset<1000> b2 = bs ^ cur;
      if (M.count(b2)) {
        bst = min(bst, cnt + M[b2]);
      }
    }
    if (bst > 100000) {
      cout << "-1\n";
    } else
      cout << bst << "\n";
  }
}
