#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10, M = 1e6 + 10, skc = 1e9 + 7;
int phi[M], vi[M], len, pri[M], n, k, q, m, ans, cnt[M], c[N], fac[N], inv[N];
int qpow(int A, int B) {
  int C = 1;
  for (; B; B >>= 1, A = 1ll * A * A % skc)
    if (B & 1) C = 1ll * A * C % skc;
  return C;
}
void upd(int &x, int y) { x = (x + y) % skc; }
int C(int A, int B) {
  return B - A < 0 ? 0 : 1ll * fac[B] * inv[A] % skc * inv[B - A] % skc;
}
void add(int x) {
  for (int i = 1; i * i <= x; ++i) {
    if (x % i) continue;
    upd(ans,
        1ll * (C(k, cnt[i] + 1) + skc - C(k, cnt[i])) % skc * phi[i] % skc);
    cnt[i]++;
    if (i * i == x) continue;
    upd(ans, 1ll * (C(k, cnt[x / i] + 1) + skc - C(k, cnt[x / i])) % skc *
                 phi[x / i] % skc);
    cnt[x / i]++;
  }
}
void prep() {
  phi[1] = 1;
  for (register int i = (2); i <= (m); ++i) {
    if (!vi[i]) {
      vi[i] = i;
      pri[++len] = i;
      phi[i] = i - 1;
    }
    for (register int j = (1); j <= (len); ++j) {
      if (vi[i] < pri[j] || i * pri[j] > m) break;
      vi[i * pri[j]] = pri[j];
      phi[i * pri[j]] = phi[i] * (i % pri[j] ? pri[j] - 1 : pri[j]);
    }
  }
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> k >> q;
  fac[0] = inv[0] = 1;
  for (register int i = (1); i <= (n + q); ++i)
    fac[i] = 1ll * fac[i - 1] * i % skc;
  inv[n + q] = qpow(fac[n + q], skc - 2);
  for (register int i = (n + q - 1); i >= (1); --i)
    inv[i] = 1ll * inv[i + 1] * (i + 1) % skc;
  m = (1e6);
  prep();
  int x;
  for (register int i = (1); i <= (n); ++i) cin >> x, add(x);
  while (q--) {
    cin >> x;
    add(x);
    cout << ans << '\n';
  }
  return 0;
}
