#include <bits/stdc++.h>
using namespace std;
const int N = 1005, mu = 1000121;
const int mu1 = 1000000121, mu2 = 234688079;
int n, m, Q, block, val[N / 64 + 1], val2[N / 64 + 1];
struct BI {
  unsigned long long b[1000 / 64 + 2];
  void reset() { memset(b, 0, sizeof(b)); }
  void set(int x) {
    int bl = (x >> 6), id = x & 63;
    b[bl] |= (1ull << id);
  }
  friend BI operator^(BI x, BI y) {
    BI ret;
    for (int i = 0; i <= block; i++) ret.b[i] = x.b[i] ^ y.b[i];
    return ret;
  }
  pair<unsigned int, unsigned int> gethash() {
    unsigned int ret1 = 0, ret2 = 0;
    for (int i = 0; i <= block; i++) {
      ret1 += b[i] % mu1 * val[i];
      ret2 += b[i] % mu2 * val2[i];
    }
    return make_pair(ret1, ret2);
  }
} v1[1 << 10];
int c[1 << 10];
struct Hash_map {
  vector<pair<pair<unsigned int, unsigned int>, int>> v[mu];
  void insert(pair<unsigned int, unsigned int> x, int y) {
    int t = x.first % mu;
    for (auto &u : v[t])
      if (u.first == x) {
        u.second = std::min(u.second, y);
        return;
      }
    v[t].push_back(make_pair(x, y));
  }
  int find(pair<unsigned int, unsigned int> x) {
    int t = x.first % mu;
    for (auto u : v[t])
      if (u.first == x) return u.second;
    return -1;
  }
} v2;
BI a[30], ans;
int siz, x;
int main() {
  scanf("%d%d%d", &n, &m, &Q);
  block = n / 64;
  for (int i = 0; i < m; i++) {
    scanf("%d", &siz);
    for (int j = 1; j <= siz; j++) {
      scanf("%d", &x);
      a[i].set(x);
    }
  }
  srand(time(0));
  for (int i = 0; i <= block; i++)
    val[i] = (rand() * 5687 | rand() * 481) + rand();
  for (int i = 0; i <= block; i++) val2[i] = (rand() << 11) + rand();
  int tim = 10;
  int t = std::min(m, 10);
  for (int i = 0; i < 1 << t; i++) {
    ans.reset();
    int cnt = 0;
    for (int j = 0; j < t; j++)
      if ((i >> j) & 1) ans = ans ^ a[j], cnt++;
    v1[i] = ans;
    c[i] = cnt;
  }
  for (int i = 0; i < 1 << (m - t); i++) {
    ans.reset();
    int cnt = 0;
    for (int j = t; j < m; j++)
      if ((i >> (j - t)) & 1) ans = ans ^ a[j], cnt++;
    pair<unsigned int, unsigned int> t = ans.gethash();
    v2.insert(t, cnt);
  }
  while (Q--) {
    scanf("%d", &siz);
    ans.reset();
    for (int i = 1; i <= siz; i++) {
      scanf("%d", &x);
      ans.set(x);
    }
    int Ans = m + 1;
    for (int i = 0; i < 1 << t; i++) {
      if (c[i] > Ans) continue;
      pair<unsigned int, unsigned int> v = (v1[i] ^ ans).gethash();
      int t = v2.find(v);
      if (t != -1 && c[i] + t < Ans) Ans = c[i] + t;
    }
    if (Ans > m)
      puts("-1");
    else
      printf("%d\n", Ans);
  }
  return 0;
}
