class Solution {
public:
int profitableSchemes(int G, int P, vector<int>& group, vector<int>& profit) {
int n = group.size();
const int mod = pow(10,9)+7;
int dp[105][105];
memset(dp,0,sizeof(dp));
dp[0][0] = 1; //group profit
int res= 0 ;
//memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++){
int g = group[i], p = profit[i];
for(int j=G;j>=g;j--){ //需要耗费的人数
for(int k=P;k>=0;k--){ //产生代价
int t = min(k+p,P);
dp[j][t] += dp[j-g][k];
dp[j][t] %= mod;
}
}
}
for(int i=0;i<=G;i++){
res += dp[i][P];
res %= mod;
}
return res;
}
};