#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010 * 1000;
const int mod = 1000 * 1000 * 1000 + 7;
long long pw(long long x, long long y) {
  long long res = 1;
  while (y > 0) {
    if (y % 2LL == 1LL) {
      res = (res * x) % mod;
      --y;
    } else {
      x = (x * x) % mod;
      y /= 2;
    }
  }
  return res;
}
long long f[maxn], rf[maxn];
long long C[maxn];
int P[maxn];
vector<int> pd[maxn];
vector<pair<int, int> > pdd[maxn];
vector<int> pr;
int k;
int d[maxn];
long long ans[maxn];
long long sum_ans;
void print_d() {
  for (int i = 1; i < 10; ++i) {
    cerr << d[i] << "\t";
  }
  cerr << "\n";
  for (int i = 1; i < 10; ++i) cerr << ans[i] << "\t";
  cerr << "\n\n";
}
void add(int x) {
  vector<int> div;
  for (int i = 1; i * i <= x; ++i) {
    if (x % i == 0) {
      div.push_back(i);
      if (x / i != i) div.push_back(x / i);
    }
  }
  for (int t : div) {
    sum_ans += mod - ans[t];
    sum_ans %= mod;
  }
  for (int t : div) {
    ++d[t];
    ans[t] += ((C[d[t]] - C[d[t] - 1]) * (long long)t) % mod;
    ans[t] += mod;
    ans[t] %= mod;
  }
  for (int t : div) {
    long long delta = C[d[t]] - C[d[t] - 1];
    if (delta == 0) continue;
    for (pair<int, int> entry : pdd[t]) {
      int cur = entry.first;
      if (entry.second == 0) {
        ans[cur] += (delta * (long long)cur);
      } else {
        ans[cur] += mod - ((delta * (long long)cur));
      }
    }
  }
  for (int t : div) {
    ans[t] %= mod;
    ans[t] += mod;
    ans[t] %= mod;
    sum_ans += ans[t];
    sum_ans %= mod;
  }
}
int main() {
  f[0] = 1;
  rf[0] = 1;
  for (int i = 1; i < maxn; ++i) {
    f[i] = (f[i - 1] * (long long)i) % mod;
    rf[i] = pw(f[i], mod - 2);
  }
  memset(P, -1, sizeof(P));
  for (int i = 2; i < maxn; ++i) {
    if (P[i] != -1) continue;
    pr.push_back(i);
    P[i] = i;
    for (int j = i + i; j < maxn; j += i)
      if (P[j] == -1) P[j] = i;
  }
  for (int i = 2; i < maxn; ++i) {
    int x = i;
    while (x > 1) {
      int p = P[x];
      pd[i].push_back(p);
      while (x % p == 0) x /= p;
    }
  }
  for (int i = 1; i < maxn; ++i) {
    int t = i;
    int cp = ((int)(pd[t]).size());
    for (int mask = 1; mask < (1 << cp); ++mask) {
      int cur = t;
      for (int i = 0; i < cp; ++i)
        if ((mask >> i) & 1) {
          cur /= pd[t][i];
        }
      pdd[i].push_back(pair<int, int>(cur, __builtin_popcount(mask) % 2));
    }
  }
  int n, q;
  scanf("%d%d%d", &n, &k, &q);
  memset(C, 0, sizeof(C));
  for (int i = k; i < maxn; ++i) {
    long long val = f[i];
    val *= rf[k];
    val %= mod;
    val *= rf[i - k];
    val %= mod;
    C[i] = val;
  }
  memset(d, 0, sizeof(d));
  memset(ans, 0, sizeof(ans));
  sum_ans = 0;
  for (int i = 0; i < n; ++i) {
    int x;
    scanf("%d", &x);
    add(x);
  }
  for (int i = 0; i < q; ++i) {
    int x;
    scanf("%d", &x);
    add(x);
    printf("%d\n", (int)sum_ans);
  }
  return 0;
}
