#include <bits/stdc++.h>
using namespace std;
unsigned long long xor64() {
  static unsigned long long x = 23811192380192ULL;
  x = x ^ (x << 7);
  return x = x ^ (x >> 9);
}
unsigned long long H[1010], b[30];
map<unsigned long long, int> bf, bs;
unsigned long long geth() {
  unsigned long long r = 0;
  int l;
  scanf("%d", &l);
  while (l--) {
    int x;
    scanf("%d", &x);
    --x;
    r ^= H[x];
  }
  return r;
}
int main() {
  int n, s, d;
  scanf("%d%d%d", &n, &s, &d);
  for (int i = 0; i < n; i++) {
    H[i] = xor64();
  }
  for (int i = 0; i < s; i++) {
    b[i] = geth();
  }
  int h = s / 2;
  for (int i = 0; i < 1 << h; i++) {
    unsigned long long x = 0;
    int c = 0;
    for (int j = 0; j < h; j++) {
      if (i >> j & 1) x ^= b[j], c++;
    }
    if (bf.count(x)) {
      bf[x] = min(bf[x], c);
    } else {
      bf[x] = c;
    }
  }
  int rh = s - h;
  for (int i = 0; i < 1 << rh; i++) {
    unsigned long long x = 0;
    int c = 0;
    for (int j = 0; j < rh; j++) {
      if (i >> j & 1) x ^= b[j + h], c++;
    }
    if (bs.count(x)) {
      bs[x] = min(bs[x], c);
    } else {
      bs[x] = c;
    }
  }
  vector<pair<unsigned long long, int> > v(bf.begin(), bf.end());
  while (d--) {
    unsigned long long x = geth();
    int ans = s + 1;
    for (int i = 0; i < v.size(); i++) {
      unsigned long long y = v[i].first ^ x;
      if (bs.count(y)) {
        ans = min(ans, bs[y] + v[i].second);
      }
    }
    if (ans > s) ans = -1;
    printf("%d\n", ans);
  }
  return 0;
}
