记录
#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<signed> ys[1000005];
signed n,m,k,M=-1,a[1000005],cnt[1000005],cnt2[1000005],ans[1000005],fac[1000005],ny[1000005],P=1000000007;
int fp(int a,int b,int p){
a%=p;
int base=a,ans=1;
while(b){
if(b&1ll){
ans=ans*base%p;
}
base=base*base%p;
b>>=1ll;
}
return ans;
}
void init(){
for(register signed i=1;i<=M;i++){
for(register signed j=1;i*j<=M;j++){
ys[i*j].push_back(i);
cnt[i]+=cnt2[i*j];
}
}
fac[0]=1;
for(register signed i=1;i<=n;i++){
fac[i]=((int)fac[i-1]*i)%P;
ny[i]=fp(fac[i],P-2,P);
}
}
int C(int x,int y){
if(x<y) return 0;
if(x==y) return 1;
return ((int)((int)fac[x]*ny[x-y])%P*ny[y])%P;
}
inline signed read(){
char c=getchar();
signed ans=0;
while(c<'0'||c>'9'){
c=getchar();
}
while(c>='0'&&c<='9'){
ans=ans*10+(c-48);
c=getchar();
}
return ans;
}
inline void write(signed x,bool f){
if(x==0){
if(!f) putchar('0');
return;
}
write(x/10,1);
putchar(x%10+48);
}
signed main()
{
n=read(),m=read(),k=read();
for(register signed i=1;i<=n;i++){
a[i]=read();
M=max(M,a[i]);
cnt2[a[i]]++;
}
init();
for(register signed i=M;i>=1;i--){
ans[i]=(ans[i]+C(cnt[i],k))%P;
if(ans[i]){
for(register signed j=0;j<ys[i].size()-1;j++){
ans[ys[i].at(j)]=(ans[ys[i].at(j)]-ans[i]+P)%P;
}
}
}
for(register signed i=1;i<=m;i++){
write(ans[i],ans[i]);
putchar(' ');
}
return 0;
}