#include <bits/stdc++.h>
using namespace std;
long long n, m, q;
long long fac[200005], inv[200005];
const long long p = 1e9 + 7;
inline long long C(long long x, long long y) {
  return x < y ? 0 : fac[x] * inv[y] % p * inv[x - y] % p;
}
long long g[1000005], phi[1000005], vis[1000005], pr[1000005], tot, ans;
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -1;
    ch = getchar();
    if (ch == -1) return 0;
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
signed main() {
  fac[0] = fac[1] = inv[0] = inv[1] = phi[1] = 1;
  for (long long i = 2; i < 200005; i++)
    fac[i] = fac[i - 1] * i % p, inv[i] = (p - p / i) * inv[p % i] % p;
  for (long long i = 2; i < 200005; i++) inv[i] = inv[i - 1] * inv[i] % p;
  for (long long i = 2; i < 1000005; i++) {
    if (!vis[i]) pr[++tot] = i, phi[i] = i - 1;
    for (long long j = 1; i * pr[j] < 1000005 && j <= tot; j++) {
      vis[i * pr[j]] = 1;
      if (i % pr[j] == 0) {
        phi[i * pr[j]] = phi[i] * pr[j];
        break;
      }
      phi[i * pr[j]] = phi[i] * (pr[j] - 1);
    }
  }
  n = read(), m = read(), q = read();
  long long x;
  for (long long i = 1; i <= n; i++) {
    x = read();
    for (long long j = 1; j * j <= x; j++)
      if (x % j == 0) {
        g[j]++;
        ans = (ans + phi[j] * (C(g[j], m) - C(g[j] - 1, m))) % p;
        if (j * j != x)
          g[x / j]++,
              ans = (ans + phi[x / j] * (C(g[x / j], m) - C(g[x / j] - 1, m))) %
                    p;
      }
  }
  while (q--) {
    x = read();
    for (long long j = 1; j * j <= x; j++)
      if (x % j == 0) {
        g[j]++;
        ans = (ans + phi[j] * (C(g[j], m) - C(g[j] - 1, m))) % p;
        if (j * j != x)
          g[x / j]++,
              ans = (ans + phi[x / j] * (C(g[x / j], m) - C(g[x / j] - 1, m))) %
                    p;
      }
    printf("%d\n", (ans + p) % p);
  }
  return 0;
}
