#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e6 + 10;
const long long mod = 1e9 + 7;
bool v[maxn];
int cnt;
int p[maxn], mob[maxn], g[maxn];
void sieve() {
  memset(p, 0, sizeof(p));
  cnt = 0;
  mob[1] = v[1] = 1;
  for (int i = 2; i < maxn; ++i) {
    if (!v[i]) p[++cnt] = i, mob[i] = -1;
    for (int j = 1; j <= cnt && i * p[j] < maxn; ++j) {
      v[i * p[j]] = 1;
      if (i % p[j] == 0) {
        mob[i * p[j]] = 0;
        break;
      } else {
        mob[i * p[j]] = -mob[i];
      }
    }
  }
  for (int i = 1; i < maxn; ++i) {
    for (int j = i; j < maxn; j += i) {
      g[j] = ((g[j] + 1LL * mob[i] * (j / i) % mod) + mod) % mod;
    }
  }
  return;
}
int fac[maxn], finv[maxn];
long long qpow(long long x, long long n) {
  long long res = 1;
  while (n) {
    if (n & 1) res = res * x % mod;
    x = x * x % mod;
    n >>= 1;
  }
  return res;
}
void init() {
  fac[0] = 1;
  for (int i = 1; i < maxn; ++i) {
    fac[i] = 1LL * fac[i - 1] * i % mod;
  }
  finv[maxn - 1] = qpow(fac[maxn - 1], mod - 2);
  for (int i = maxn - 2; i >= 0; --i) {
    finv[i] = 1LL * finv[i + 1] * (i + 1) % mod;
  }
}
int C(int n, int m) { return 1LL * fac[n] * finv[m] % mod * finv[n - m] % mod; }
int a[maxn];
int n, q, k;
int mx = 0;
long long calc() {
  long long ans = 0;
  for (int i = 1; i <= mx; ++i) {
    ans = ((ans + 1LL * g[i] * C(a[i], k) % mod) % mod + mod) % mod;
  }
  return ans;
}
int main() {
  sieve();
  init();
  memset(a, 0, sizeof(a));
  scanf("%d%d%d", &n, &k, &q);
  for (int i = 1; i <= n; ++i) {
    int x;
    scanf("%d", &x);
    mx = max(mx, x);
    a[x]++;
  }
  for (int i = 1; i <= mx; ++i) {
    for (int j = i + i; j <= mx; j += i) {
      a[i] += a[j];
    }
  }
  long long ans = calc();
  for (int i = 1; i <= q; ++i) {
    int x;
    scanf("%d", &x);
    mx = max(mx, x);
    for (int j = 1; j * j <= x; ++j) {
      if (x % j == 0) {
        a[j]++;
        long long tmp = 1LL * g[j] * (C(a[j], k) - C(a[j] - 1, k)) % mod;
        ans = ((ans + tmp) % mod + mod) % mod;
        if (x / j != j) {
          a[x / j]++;
          long long tmp =
              1LL * g[x / j] * (C(a[x / j], k) - C(a[x / j] - 1, k)) % mod;
          ans = ((ans + tmp) % mod + mod) % mod;
        }
      }
    }
    printf("%lld\n", (ans + mod) % mod);
  }
  return 0;
}
