#include #include #include using namespace std; int N, K; vector items_weight; int dp[20][2000001]; int pack(int now, int weight_now){ if(now == N){ return weight_now; }else if(dp[now][weight_now] != -1){ return dp[now][weight_now]; }else if(weight_now + items_weight[now] > K){ return dp[now][weight_now] = pack(now + 1, weight_now); }else{ return dp[now][weight_now] = max(pack(now + 1, weight_now), pack(now + 1, weight_now + items_weight[now])); } } int main(){ cin >> N >> K; items_weight.resize(N); for(int i = 0; i < N; i++){ cin >> items_weight[i]; } for(int i = 0; i < 20; i++){ for(int j = 0; j < 2000001; j++){ dp[i][j] = -1; } } cout << pack(0, 0) << endl; }