#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define MAXN 5005
#define MOD 1000000007
using namespace std;
int n,t,a[MAXN],ba[MAXN],f[MAXN*2],f2[MAXN*2],s,mi;
/*
void func(){
memset(f,0,sizeof(f));
f[0]=1;
for(int i=1;i<=n;i++){
for(int j=a[i];j<=t;j++){
f[j]=max(f[j],f[j-a[i]]+(bool(f[j-a[i]])and f[a[i]] and a[i]));
}
}
}
*/
void func(){
memset(f,0,sizeof(f));
f[0]=1;
for(int i=1;i<=n;i++){
if(a[i]==0){
continue;
}
for(int j=a[i];j<=t;j++){
int x=f[j];
f[j]=max(f[j],f[j]+f[j-a[i]]);
if(f[j]==x){
f2[j]=1;
}
else{
f2[j]=0;
}
f[j]%=MOD;
}/*
for(int j=1;j<=t;j++){
cout<<f[j]<<" ";
}
cout<<endl;*/
}
}
signed main(){
cin.tie(0);
cout.tie(0);
cin>>n>>t;
for(int i=1;i<=n;i++){
cin>>a[i];
s+=a[i];
ba[i]=a[i];
}
func();
for(int i=1;i<=n;i++){
if(!f2[t]){
cout<<f[t]-f[t-a[i]]<<endl;
}
else{
cout<<f[t];
}
}
/*
for(int i=1;i<=n;i++){
a[i]=0;
func();
cout<<f[t]<<endl;
cout<<endl;
a[i]=ba[i];
}
*/
return 0;
}
/*完全背包
for(int i=1;i<=n;i++){
for(int j=w[i];j<=c;j++){
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
}
*/
对3错17。无超时、超空间等。