#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const constexpr int INF = 1e9; //typedef std::pair P; #define FOR(i, a, n) for (ll i = (ll)a; i<(ll)n; ++i) #define REP(i, n) FOR(i, 0, n) typedef long long ll; typedef vector VI; const constexpr ll MOD = 1e9+7; vector > vp; struct Less { bool operator()(const pair& x, const pair& y) const { return x.first > y.first; } }; ll GCD(ll a, ll b){ if(b==0) return a; return GCD(b, a%b); } //グラフの隣接リスト VI g[200010]; //頂点の入次数を管理 int h[100010]; int a[21]; int ans; int N, K; void dfs(int idx, int sum){ if(idx==N) { if(sum<=K) ans = max(ans, sum); return ; } dfs(idx+1, sum+a[idx]); dfs(idx+1, sum); return; } int main(void) { cin >> N >> K; REP(i, N) cin >> a[i]; int t=0; dfs(0, t); cout << ans << endl; return 0; }