func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1e6 + 10;   const long long mod = 1e9 + 7;   int prime[maxn], g[maxn], last[maxn], num[maxn], cnt[maxn];   long long fac[maxn], invf[maxn];   int t[500];   bool vis[maxn];   long long fpow(long long a, long long b, long long p = mod) {     long long ans = 1;     while (b) {       if (b & 1) ans = ans * a % p;       a = a * a % p;       b >>= 1;     }     return ans;   }   void init() {     int cnt = 0;     g[1] = 1;     last[1] = 1;     fac[1] = 1;     fac[0] = 1;     for (int i = 2; i < maxn; i++) {       fac[i] = fac[i - 1] * i % mod;       if (!vis[i]) prime[++cnt] = i, g[i] = i - 1, last[i] = 1;       for (int j = 1; j <= cnt && i * prime[j] < maxn; j++) {         int x = i * prime[j];         vis[x] = true;         if (i % prime[j] == 0) {           last[x] = last[i];           if (last[x] == 1)             g[x] = x - i;           else             g[x] = g[x / last[x]] * g[last[x]];           break;         }         last[x] = i;         g[x] = g[i] * g[prime[j]];       }     }     invf[maxn - 1] = fpow(fac[maxn - 1], mod - 2);     for (int i = maxn - 2; i >= 0; i--) invf[i] = invf[i + 1] * (i + 1) % mod;   }   long long C(int n, int m) {     return n < m ? 0 : fac[n] * invf[m] % mod * invf[n - m] % mod;   }   int getfac(int x) {     int len = 0;     for (int i = 1; i * i <= x; i++) {       if (x % i) continue;       t[++len] = i;       if (i * i != x) t[++len] = x / i;     }     sort(t + 1, t + 1 + len);     return len;   }   int main() {     std::ios::sync_with_stdio(false);     cout.tie(0);     init();     int n, k, q;     cin >> n >> k >> q;     for (int i = 1; i <= n; i++) {       int x;       cin >> x;       num[x]++;     }     for (int i = maxn - 1; i >= 1; i--) {       for (int j = i; j < maxn; j += i) cnt[i] += num[j];     }     long long ans = 0;     for (int i = 1; i < maxn; i++) {       ans = (ans + C(cnt[i], k) * g[i] % mod) % mod;     }     while (q--) {       int x;       cin >> x;       int len = getfac(x);       for (int i = len; i > 0; i--) {         long long dert = C(cnt[t[i]] + 1, k) - C(cnt[t[i]], k);         dert *= g[t[i]];         ans = (ans + dert + mod) % mod;         cnt[t[i]]++;       }       ans = (ans % mod + mod) % mod;       cout << ans <<   n ;     }     return 0;   }   