#include <bits/stdc++.h>
using namespace std;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
long long n;
long long k;
long long gsum;
long long mod = 1000000000 + 7;
int col[1000500];
long long cc[1000500];
long long tt[1000500];
long long fact[200500];
long long obr[200500];
vector<int> del[1000500];
int was[1000500];
long long st(long long x, long long p) {
  long long ans = 1;
  while (p) {
    if (p & 1) ans = ans * x % mod;
    x = x * x % mod;
    p /= 2;
  }
  return ans;
}
long long cnk(int n, int k) {
  if (k > n) return 0;
  return (((fact[n] * obr[k]) % mod) * obr[n - k]) % mod;
}
vector<int> gv;
int bu[1000500];
void calc() {
  int n = 1000300;
  for (int i = 2; i <= n; i++)
    if (bu[i] == 0)
      for (int j = i; j <= n; j += i) bu[j] = i;
}
vector<int> getd(int x) {
  if (was[x]) return del[x];
  vector<int> v;
  for (int i = 1; i * i <= x; i++) {
    if (x % i == 0) {
      v.push_back(i);
      if (i * i != x) v.push_back(x / i);
    }
  }
  sort((v).begin(), (v).end());
  was[x] = 1;
  del[x] = v;
  return v;
}
void recalc(int x) {
  col[x]++;
  long long d = (cnk(col[x], k) - cnk(col[x] - 1, k) - tt[x] + mod + mod) % mod;
  gsum += d * x % mod;
  gsum %= mod;
  cc[x] = (cc[x] + d) % mod;
  for (int i = 0; i < (((int)(del[x]).size()) - 1); i++) {
    int u = del[x][i];
    {
      tt[u] += d;
      if (tt[u] >= mod) tt[u] -= mod;
    }
  }
}
void add(int x) {
  gv = getd(x);
  for (int i = 0; i < (((int)(gv).size())); i++) {
    int x = gv[i];
    tt[x] = 0;
    if (!was[x]) {
      was[x] = 1;
      for (int j = 0; j < (i); j++)
        if (x % gv[j] == 0) del[x].push_back(gv[j]);
      del[x].push_back(x);
    }
  }
  for (int i = (((int)(gv).size())) - 1; i >= 0; i--) {
    int o = gv[i];
    recalc(o);
  }
}
int main() {
  int q;
  cin >> n >> k >> q;
  fact[0] = obr[0] = 1;
  for (int i = 1; i <= n + q + 1; i++) {
    fact[i] = fact[i - 1] * i % mod;
    obr[i] = st(fact[i], mod - 2);
  }
  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)gsum);
  }
  return 0;
}
