#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
const int mod1 = 998244353;
const int mod2 = 1e9 + 7;
const int b1 = 337;
const int b2 = 421;
const int inf = 2147483647;
struct Pair {
  int x[2] = {};
  bool operator<(const Pair a) const {
    return x[0] < a.x[0] || x[0] == a.x[0] && x[1] < a.x[1];
  }
};
struct BitSet {
  unsigned long long b[16] = {};
  inline void reset() { memset(b, 0, sizeof(b)); }
  inline void set(int x) { b[x / 64] |= (1ull << (x % 64)); }
  inline void operator^=(const BitSet &a) {
    for (int i = 0; i < 16; ++i) b[i] ^= a.b[i];
  }
  inline long long getHashVal() {
    Pair ans;
    for (int i = 0; i < 16; ++i) {
      ans.x[0] = (1ll * ans.x[0] * b1 % mod1 + b[i] % mod1) % mod1;
      ans.x[1] = (1ll * ans.x[1] * b2 % mod2 + b[i] % mod2) % mod2;
    }
    return 1ll * ans.x[0] * mod2 + ans.x[1];
  }
};
int n, s, d;
BitSet bs[31], sta[1 << 20], cur;
int cnt[1 << 20], m;
unordered_map<long long, int> mp;
void init() {
  m = min(s, 20);
  for (int i = 0; i < m; ++i) {
    cnt[1 << i] = 1;
    sta[1 << i] = bs[i];
  }
  for (int i = 0; i < (1 << m); ++i) {
    if (i != (i & -i)) {
      cnt[i] = cnt[i - (i & -i)] + 1;
      sta[i] = sta[i - (i & -i)];
      sta[i] ^= sta[i & -i];
    }
    long long x = sta[i].getHashVal();
    if (!mp.count(x) || mp[x] > cnt[i]) {
      mp[x] = cnt[i];
    }
  }
  for (int i = 0; i < (s - m); ++i) {
    sta[1 << i] = bs[i + m];
  }
  for (int i = 1; i < (1 << (s - m)); ++i) {
    if (i == (i & -i)) continue;
    sta[i] = sta[i - (i & -i)];
    sta[i] ^= sta[i & -i];
  }
}
int getans() {
  BitSet now;
  int ans = inf;
  for (int i = 0; i < (1 << (s - m)); ++i) {
    if (cnt[i] >= ans) continue;
    now = cur, now ^= sta[i];
    long long x = now.getHashVal();
    if (mp.count(x) && mp[x] + cnt[i] < ans) {
      ans = mp[x] + cnt[i];
    }
  }
  return ans == inf ? -1 : ans;
}
int main() {
  scanf("%d%d%d", &n, &s, &d);
  for (int i = 0; i < s; ++i) {
    int c;
    scanf("%d", &c);
    for (int j = 0; j < c; ++j) {
      int u;
      scanf("%d", &u);
      u--;
      bs[i].set(u);
    }
  }
  init();
  vector<int> ans;
  for (int i = 0; i < d; ++i) {
    int t;
    scanf("%d", &t);
    cur.reset();
    while (t--) {
      int u;
      scanf("%d", &u);
      u--;
      cur.set(u);
    }
    ans.push_back(getans());
  }
  for (int i = 0; i < ans.size(); ++i) printf("%d\n", ans[i]);
  puts("");
}
