rt,题解的思路好像和我不太一样qaq
/*writer:houpingze sb*/
#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
using namespace std;
int read(){
int res=0,fs=1; char c=getchar();
while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
return res*fs;
}
void print(int x){
if(x<0) { putchar('-'); x=-x;}
if(x>9) print(x/10);
putchar(x%10+'0');
}
int n,cnt,m,a[5010],ans,tmp,mod,f[550][505][550],b;
int main() {
ios::sync_with_stdio(false);
cin>>n>>m>>b>>mod;
for(int i=1;i<=n;i++) cin>>a[i];
/*
f[i][j][k]表示1~i个程序员编写1~j行代码,出了k个bug,所需要的方案数
*/
f[0][0][0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){//枚举1~i个人编写的总代码数
for(int k=0;k<=j;k++){//枚举第i个程序员要编写的代码行数
for(int l=0;l<=b;l++){ //枚举bug数
f[i][j][l]+=f[i-1][j-k][l-a[i]*k];
f[i][j][l]%=mod;
}
}
}
}
for(int i=0;i<=b;i++) ans+=f[n][m][i],ans%=mod;
cout<<ans;
return 0;
}