#include <bits/stdc++.h>
const int MAXN = 220000;
const int MAXX = 1100000;
const int P = 1E9 + 7;
int n, k, q, ans;
bool mark[MAXX];
int pri[MAXX], phi[MAXX];
int fac[MAXN], ifac[MAXN];
int c[MAXX], f[MAXX];
int qpow(int n, int k) {
  int r = 1;
  while (k) {
    if (k & 1) r = 1ll * r * n % P;
    n = 1ll * n * n % P;
    k >>= 1;
  }
  return r;
}
inline int C(int n, int m) {
  if (m < 0 || m > n) return 0;
  return 1ll * fac[n] * ifac[m] % P * ifac[n - m] % P;
}
void prework(int lim) {
  phi[1] = 1;
  for (int i = 2, cp = 0; i <= lim; i++) {
    if (!mark[i]) pri[++cp] = i, phi[i] = i - 1;
    for (int j = 1; j <= cp && i * pri[j] <= lim; j++) {
      mark[i * pri[j]] = 1;
      if (i % pri[j] == 0) {
        phi[i * pri[j]] = 1ll * phi[i] * pri[j] % P;
        break;
      }
      phi[i * pri[j]] = 1ll * phi[i] * (pri[j] - 1) % P;
    }
  }
  fac[0] = 1;
  for (int i = 1; i <= n + q; i++) fac[i] = 1ll * fac[i - 1] * i % P;
  ifac[n + q] = qpow(fac[n + q], P - 2);
  for (int i = n + q; i >= 1; i--) ifac[i - 1] = 1ll * ifac[i] * i % P;
  for (int i = 1; i <= lim; i++) {
    f[i] = 0;
    for (int j = 1; i * j <= lim; j++) f[i] += c[i * j];
    ans = (ans + 1ll * C(f[i], k) * phi[i]) % P;
  }
}
inline void inc(int x) {
  f[x]++;
  ans = (ans + 1ll * (C(f[x], k) - C(f[x] - 1, k) + P) * phi[x]) % P;
}
void insert(int x) {
  for (int i = 1; i * i <= x; i++)
    if (x % i == 0) {
      inc(i);
      if (i * i != x) inc(x / i);
    }
}
int main() {
  scanf("%d%d%d", &n, &k, &q);
  for (int i = 1; i <= n; i++) {
    int x;
    scanf("%d", &x);
    c[x]++;
  }
  ans = 0;
  prework(1E6);
  for (int i = 1; i <= q; i++) {
    int x;
    scanf("%d", &x);
    insert(x);
    printf("%d\n", ans);
  }
  return 0;
}
