#include <bits/stdc++.h>
using namespace std;
const int maxn = 2000000;
const long long MOD = 1000000007;
long long C[maxn + 10], F[maxn + 10], inv[maxn + 10], cnt[maxn + 10],
    phi[maxn + 10];
int n, k, q;
long long mp(long long a, int n) {
  long long ret = 1;
  a %= MOD;
  while (n) {
    if (n & 1) ret = ret * a % MOD;
    n >>= 1;
    a = a * a % MOD;
  }
  return ret;
}
long long Inv(long long n) { return mp(n, MOD - 2); }
long long query(int x, int d) { return C[cnt[d]] * phi[d] % MOD; }
int main() {
  F[0] = inv[0] = 1;
  for (int i = 1; i <= maxn; i++) {
    F[i] = F[i - 1] * i % MOD;
    inv[i] = Inv(F[i]);
  }
  memset(phi, 0, sizeof(phi));
  for (int i = 1; i <= maxn; i++) {
    phi[i] = (phi[i] + i) % MOD;
    for (int j = i + i; j <= maxn; j += i)
      phi[j] = (phi[j] - phi[i] + MOD) % MOD;
  }
  while (scanf("%d%d%d", &n, &k, &q) != EOF) {
    for (int i = 0; i <= n + q; i++) {
      if (i < k - 1)
        C[i] = 0;
      else
        C[i] = F[i] * inv[k - 1] % MOD * inv[i - k + 1] % MOD;
    }
    memset(cnt, 0, sizeof(cnt));
    long long ans = 0;
    for (int j = 1; j <= n + q; j++) {
      int x;
      scanf("%d", &x);
      for (int i = 1; i * i <= x; i++) {
        if (x % i == 0) {
          ans = (ans + query(x, i)) % MOD;
          if (i * i != x) ans = (ans + query(x, x / i)) % MOD;
        }
      }
      for (int i = 1; i * i <= x; i++) {
        if (x % i == 0) {
          cnt[i]++;
          if (i * i != x) cnt[x / i]++;
        }
      }
      if (j > n) printf("%I64d\n", ans);
    }
  }
}
