#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 1e18
#define endl '\n'
typedef pair<int, int>pii;
const int N = 1e6 + 10, mod = 1e9 + 7;
int fact[N];
int infact[N];
int a[N], g[N];
int qumi(int a, int b, int p)
{
int res = 1;
while (b)
{
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
int cal(int a, int b)
{
if (a < b) return 0;
int res = fact[a] * infact[a - b] % mod * infact[b] % mod;
return res;
}
inline int read() {
char ch = getchar(); int f = 1; while (ch < '0' || ch>'9') { if (ch == '-') f = -f; ch = getchar(); }
int x = 0; while (ch >= '0' && ch <= '9') x = (x << 3) + (x << 1) + ch - '0', ch = getchar(); return x * f;
}
signed main()
{
ios::sync_with_stdio(false); cin.tie(0); cin.tie(0);
int n, m, k;
cin >> n >> m >> k;
fact[0] = infact[0] = 1;
for (int i = 1; i <= n; i++)
{
fact[i] = fact[i - 1] * i % mod;
infact[i] = infact[i - 1] * qumi(i, mod - 2, mod) % mod;
}
/*vector<int>a(n + 1);*/
map<int, int>mp;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
mp[a[i]]++;
}
/* vector<int>g(m + 1, 0);*/
for (int i = m; i >= 1; i--)
{
int res = 0;
for (int j = 1; j * i <= m; j++)
{
res += mp[i * j];
// 先容斥减掉,然后再求得最后只
g[i] = (g[i] - g[i * j] + mod) % mod;
}
g[i] += ((cal(res, k) % mod + mod) % mod);
}
for (int i = 1; i <= m; i++) cout << g[i] % mod << " ";
return 0;
}