#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7;
const int MOD = 1e9 + 7;
long long k[N];
long long cnt[N];
long long f[N], inv[N];
long long n, x, q;
long long ans = 0;
long long bpow(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % MOD;
    a = a * a % MOD;
    b >>= 1;
  }
  return ans;
}
long long fix(long long a) { return (a % MOD + MOD) % MOD; }
long long c(long long i, long long j) {
  if (i > j) return 0;
  return f[j] * inv[i] % MOD * inv[j - i] % MOD;
}
void update(long long i) {
  ans -= k[i] * c(x, cnt[i]) % MOD;
  ans = fix(ans);
  cnt[i]++;
  ans += k[i] * c(x, cnt[i]) % MOD;
  ans = fix(ans);
}
int main() {
  ios::sync_with_stdio(false);
  inv[0] = f[0] = 1;
  for (int i = 1; i < N; i++) {
    f[i] = f[i - 1] * i % MOD;
    inv[i] = inv[i - 1] * bpow(i, MOD - 2) % MOD;
  }
  for (int i = 1; i < N; i++) {
    k[i] = fix(i - k[i]);
    for (int j = 2 * i; j < N; j += i) k[j] = fix(k[j] + k[i]);
  }
  cin >> n >> x >> q;
  for (int i = 0; i < n; i++) {
    long long t;
    cin >> t;
    for (int j = 1; j * j <= t; j++)
      if (t % j == 0) {
        update(j);
        if (j * j != t) update(t / j);
      }
  }
  for (int i = 0; i < q; i++) {
    int t;
    cin >> t;
    for (int j = 1; j * j <= t; j++)
      if (t % j == 0) {
        update(j);
        if (j * j != t) update(t / j);
      }
    cout << ans << "\n";
  }
  return 0;
}
