#include<cstdio>
#include<cctype>
#include<queue>
#include<cmath>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i!=-1;i=next[i])
using namespace std;
inline int read() {
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c==‘-‘) f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-‘0‘;
return x*f;
}
typedef long long ll;
const int maxn=300010;
const int mod=1000000007;
int n,m,k,S[maxn];
ll ans[maxn],xp[maxn],inv[maxn];
ll pow(int a,int n) {
if(!n) return 1;
ll ans=pow(a,n>>1);
(ans*=ans)%=mod;if(n&1) (ans*=a)%=mod;
return ans;
}
int main() {
n=read();m=read();k=n-read();
rep(i,1,n) S[read()]++;
xp[0]=inv[0]=1;
rep(i,1,n) xp[i]=(xp[i-1]*i)%mod,inv[i]=(inv[i-1]*pow(i,mod-2))%mod;
rep(i,1,m) {
int cnt=0,tot=0;
for(int j=i;j<=m;j+=i) cnt+=S[j],tot++;
if(cnt>=k) ans[i]=pow(tot-1,cnt-k)*pow(tot,n-cnt)%mod*xp[cnt]%mod*inv[k]%mod*inv[cnt-k]%mod;
}
dwn(i,m,1) for(int j=2*i;j<=m;j+=i) ans[i]=(ans[i]-ans[j]+mod)%mod;
printf("%lld",ans[1]);rep(i,2,m) printf(" %lld",ans[i]);
return 0;
}