#include using namespace std; #define PII pair const int mod=167772161; int item[405]; int ind[405]; int dp[2005][405][405]; int n,M; void solve(int p, int l, int r) { if(l==r) { ind[l]=p; return; } int m=(l+r)/2; for(int j=0;j<=n;j++) { for(int i=0;i<=M;i++)dp[2*p][j][i]=dp[p][j][i], dp[2*p+1][j][i]=dp[p][j][i]; } for(int i=l;i<=m;i++)for(int k=n-1;k>=0;k--)for(int j=M;j>=item[i];j--) { dp[2*p+1][k+1][j]=dp[2*p+1][k+1][j]+dp[2*p+1][k][j-item[i]]; if(dp[2*p+1][k+1][j]>=mod)dp[2*p+1][k+1][j]-=mod; } for(int i=m+1;i<=r;i++)for(int k=n-1;k>=0;k--)for(int j=M;j>=item[i];j--) { dp[2*p][k+1][j]=dp[2*p][k+1][j]+dp[2*p][k][j-item[i]]; if(dp[2*p][k+1][j]>=mod)dp[2*p][k+1][j]-=mod; } solve(2*p,l,m); solve(2*p+1,m+1,r); } int main() { ios_base::sync_with_stdio(0); cin>>n>>M; dp[1][0][0]=1; for(int i=1;i<=n;i++) { cin>>item[i]; } solve(1,1,n); for(int i=1;i<=n;i++) { for(int j=1;j