#include <bits/stdc++.h>
using namespace std;
void ga(int N, int *A) {
  for (int i(0); i < N; i++) scanf("%d", A + i);
}
vector<int> g[1024], w[1024];
int b, M, dp[1024][2520], V[1024][2520], N, C[1024], Z, a, G[1024 * 2520],
    o[1024 * 2520];
int dyn(int u, int r, int *o, int L) {
  int &v = dp[u][r];
  if (~v) return v;
  if (~V[u][r]) {
    int S = 0;
    for (int k(V[u][r]); k < L; k++) S += !G[o[k]]++;
    for (int k(V[u][r]); k < L; k++) G[o[k]] = 0;
    return S;
  }
  V[u][r] = L, r = (r + C[u]) % 2520, o[L++] = u;
  return v = dyn(g[u][r % g[u].size()], r, o, L);
}
int main(void) {
  scanf("%d", &N), (memset(V, -1, sizeof(V))), (memset(dp, -1, sizeof(dp))),
      ga(N, C);
  for (int i(0); i < N; i++) C[i] = (C[i] % 2520 + 2520) % 2520;
  for (int i(0); i < N; i++) {
    scanf("%d", &M);
    for (int j(0); j < M; j++)
      scanf("%d", &a), g[i].push_back(--a), w[i].push_back(Z++);
  }
  int _;
  scanf("%d", &_);
  for (int i(0); i < _; i++)
    scanf("%d%d", &a, &b),
        printf("%d\n", dyn(--a, (b % 2520 + 2520) % 2520, o, 0));
  return 0;
}
