#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
const int N = 1e6;
const int mod = 1e9 + 7;
int n, k, q, cnt[maxn], ans;
int inv[maxn], ifc[maxn], fac[maxn];
inline int read() {
  int x = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = (x << 1) + (x << 3) + c - '0';
    c = getchar();
  }
  return x * f;
}
inline void insert(int x) {
  for (int i = 1; i * i <= x; i++) {
    if (x % i) continue;
    cnt[i]++;
    cnt[x / i]++;
    if (i * i == x) cnt[i]--;
  }
}
int flag[maxn], pri[maxn], tot, phi[maxn];
int main() {
  n = read(), k = read(), q = read();
  for (int i = 1, x; i <= n; i++) x = read(), insert(x);
  phi[1] = 1;
  for (int i = 2; i <= N; i++) {
    if (!flag[i]) pri[++tot] = i, phi[i] = i - 1;
    for (int j = 1; j <= tot && i * pri[j] <= N; j++) {
      flag[i * pri[j]] = 1;
      if (i % pri[j] == 0) {
        phi[i * pri[j]] = phi[i] * pri[j];
        break;
      }
      phi[i * pri[j]] = phi[i] * (pri[j] - 1);
    }
  }
  inv[1] = fac[0] = ifc[0] = 1;
  for (int i = 2; i <= N; i++)
    inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;
  for (int i = 1; i <= N; i++) fac[i] = 1ll * fac[i - 1] * i % mod;
  for (int i = 1; i <= N; i++) ifc[i] = 1ll * ifc[i - 1] * inv[i] % mod;
  for (int i = 1; i <= N; i++)
    if (cnt[i] >= k)
      ans = (ans + 1ll * fac[cnt[i]] * ifc[k] % mod * ifc[cnt[i] - k] % mod *
                       phi[i] % mod) %
            mod;
  for (int i = 1, x; i <= q; i++) {
    x = read();
    for (int j = 1; j * j < x; j++) {
      if (x % j) continue;
      if (cnt[j] >= k)
        ans = (ans -
               1ll * fac[cnt[j]] * ifc[k] % mod * ifc[cnt[j] - k] % mod *
                   phi[j] % mod +
               mod) %
              mod;
      if (cnt[x / j] >= k)
        ans = (ans -
               1ll * fac[cnt[x / j]] * ifc[k] % mod * ifc[cnt[x / j] - k] %
                   mod * phi[x / j] % mod +
               mod) %
              mod;
      cnt[j]++;
      cnt[x / j]++;
      if (cnt[j] >= k)
        ans = (ans + 1ll * fac[cnt[j]] * ifc[k] % mod * ifc[cnt[j] - k] % mod *
                         phi[j] % mod) %
              mod;
      if (cnt[x / j] >= k)
        ans = (ans + 1ll * fac[cnt[x / j]] * ifc[k] % mod *
                         ifc[cnt[x / j] - k] % mod * phi[x / j] % mod) %
              mod;
    }
    int sq = sqrt(x);
    if (sq * sq == x) {
      if (cnt[sq] >= k)
        ans = (ans -
               1ll * fac[cnt[sq]] * ifc[k] % mod * ifc[cnt[sq] - k] % mod *
                   phi[sq] % mod +
               mod) %
              mod;
      cnt[sq]++;
      if (cnt[sq] >= k)
        ans = (ans + 1ll * fac[cnt[sq]] * ifc[k] % mod * ifc[cnt[sq] - k] %
                         mod * phi[sq] % mod) %
              mod;
    }
    printf("%d\n", ans);
  }
  return 0;
}
