#include <bits/stdc++.h>
using namespace std;
const int next_x[8] = {0, 1, -1, 0, 1, 1, -1, -1};
const int next_y[8] = {1, 0, 0, -1, 1, -1, -1, 1};
const int inf = 1e9 + 5;
const long long linf = 1e18 + 5;
const double PI = acos(-1.0);
const double eps = 1e-8;
const int MAXN = 2e4 + 10;
const int N = 1005;
const int fix = 500 * 500 + 5;
int n, s, d, m;
vector<pair<bitset<N>, int>> v1, v2;
bitset<N> cur, a[31];
unordered_map<bitset<N>, int> g;
void dfs1(int i, int num) {
  if (i == m + 1) return void(v1.push_back({cur, num}));
  dfs1(i + 1, num), cur ^= a[i], dfs1(i + 1, num + 1), cur ^= a[i];
}
void dfs2(int i, int num) {
  if (i == s + 1) return void(v2.push_back({cur, num}));
  dfs2(i + 1, num), cur ^= a[i], dfs2(i + 1, num + 1), cur ^= a[i];
}
int work() {
  scanf("%d%d%d", &n, &s, &d), m = min(10, max(s - s / 2, s / 2));
  for (register int i = (1), I = (s) + 1; i < I; ++i) {
    int c, x;
    scanf("%d", &c);
    while (c--) scanf("%d", &x), a[i][x] = 1;
  }
  dfs1(1, 0), dfs2(m + 1, 0);
  for (auto p : v2) {
    if (!g.count(p.first))
      g[p.first] = p.second;
    else
      g[p.first] = min(g[p.first], p.second);
  }
  while (d--) {
    bitset<N> q;
    int ans = inf, c, x;
    scanf("%d", &c);
    while (c--) scanf("%d", &x), q[x] = 1;
    if (g.count(q)) ans = g[q];
    for (auto p : v1) {
      if (p.first == q) ans = min(ans, p.second);
      bitset<N> req = (q ^ p.first);
      if (g.count(req)) ans = min(ans, g[req] + p.second);
    }
    printf("%d\n", ans == inf ? -1 : ans);
  }
  return 0;
}
int main() {
  work();
  return 0;
}
