#include <bits/stdc++.h>
using std::cerr;
using std::endl;
const int N = 1e6 + 5, P = 1e9 + 7;
inline int fpow(int x, int y) {
  int ret = 1;
  for (; y; y >>= 1, x = 1ll * x * x % P)
    if (y & 1) ret = 1ll * ret * x % P;
  return ret;
}
inline void check(int &x) { x -= P, x += x < 0 ? P : 0; }
int n, K, q, pr[N], tot, vis[N], mu[N], sum[N];
int fac[N], inv[N];
inline int binom(int x, int y) {
  if (x < y) return 0;
  return 1ll * fac[x] * inv[y] % P * inv[x - y] % P;
}
inline void init() {
  mu[1] = 1;
  for (int i = 2; i < N; ++i) {
    if (!vis[i]) pr[++tot] = i, mu[i] = -1;
    for (int j = 1; j <= tot && i * pr[j] < N; ++j) {
      vis[i * pr[j]] = 1;
      if (!(i % pr[j])) break;
      mu[i * pr[j]] = -mu[i];
    }
  }
  for (int i = 1; i < N; ++i)
    for (int j = i; j < N; j += i) {
      if (!mu[j / i]) continue;
      if (mu[j / i] > 0)
        check(sum[j] += i);
      else
        check(sum[j] += P - i);
    }
  for (int i = fac[0] = 1; i < N; ++i) fac[i] = 1ll * fac[i - 1] * i % P;
  inv[N - 1] = fpow(fac[N - 1], P - 2);
  for (int i = N - 1; i; --i) inv[i - 1] = 1ll * i * inv[i] % P;
}
int ans, cnt[N];
inline void insert(int val) {
  for (int i = 1; i * i <= val; ++i) {
    if (val % i) continue;
    int tmp = 1ll * binom(cnt[i], K) * sum[i] % P;
    check(ans += P - tmp);
    ++cnt[i];
    tmp = 1ll * binom(cnt[i], K) * sum[i] % P;
    check(ans += tmp);
    if (i * i == val) continue;
    int j = val / i;
    tmp = 1ll * binom(cnt[j], K) * sum[j] % P;
    check(ans += P - tmp);
    ++cnt[j];
    tmp = 1ll * binom(cnt[j], K) * sum[j] % P;
    check(ans += tmp);
  }
}
int main() {
  std::ios::sync_with_stdio(0);
  std::cin.tie(0);
  std::cin >> n >> K >> q;
  init();
  for (int i = 1, j; i <= n + q; ++i) {
    std::cin >> j;
    insert(j);
    if (i > n) std::cout << ans << '\n';
  }
  return 0;
}
