#include #include #include #include #include using namespace std; const int MAXN = 1005; const int MAXH = 1005; const int MAX_RES=100000; const int INF=99999999; int N; int values[MAXN]; int sum; int budget; int best=INF; int cnt=0; vector < int > sol; vector < vector < int > > finale; int risultati[MAX_RES]; int cnt_sol=-1; int solve(int p, int val, int rest){ if(p==N){ if(rest<=best){ cnt_sol++; risultati[cnt_sol]=rest; for(int i=0;i= values[p])){ cnt++; sol.push_back(values[p]); ans=solve(p+1, values[p], rest-values[p]) + values[p]; sol.pop_back(); cnt--; } ans=max(ans, solve(p+1,val,rest)); best=min(best, rest-ans); return ans; } int main() { ifstream in("input.txt"); ofstream out("output.txt"); sum = 0; in >> N >>budget; finale.reserve(MAX_RES); for (int i = 0; i < N; i++) { in >> values[i]; } out << solve(0,0,budget) << endl; for(int i=0;i<=cnt_sol;i++){ if(risultati[i]<=best){ for(unsigned j=0;j<=finale[cnt_sol].size();j++){ if(finale[i][j]!=0) out <