/* Authors: Vu Hoang Bach from Phuoc Hoa Secondary School */
//#pragma GCC optimize("O3", "unroll-loops")
//#pragma GCC target("avx2", "bmi", "bmi2", "lzcnt", "popcnt")
#include <bits/stdc++.h>
#define ldb long double
//#define double ldb
#define db double
#define unomap unordered_map
#define unoset unordered_set
#define endl '\n'
#define str string
#define strstr stringstream
#define sz(a) (int)a.size()
#define ll long long
//#define int ll
#define pii pair <int, int>
#define pll pair <ll, ll>
#define Unique(a) a.resize(unique(all(a)) - a.begin())
#define ull unsigned ll
#define fir first
#define sec second
#define idc cin.ignore()
#define lb lower_bound
#define ub upper_bound
#define all(s) s.begin(), s.end()
#define rev reverse
#define sigma ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define skibidi int main
#define rizz signed main
#define gcd __gcd
#define found(a, mp) mp.find(a) != mp.end()
#define game_over exit(0);
#define stfu return 0;
#define stop break;
#define pushb push_back
#define popb pop_back
#define pushf push_front
#define popf pop_front
#define mul2x(a, x) a << x
#define div2x(a, x) a >> x
#define no_check continue;
#define lcm(a, b) a / __gcd(a, b) * b
#define log_base(x, base) log(x) / log(base)
#define debug clog << "No errors!"; game_over;
#define forw(i, a, b) for (int i = a; i <= b; ++i)
#define forw2(i, a, b) for (ll i = a; i <= b; ++i)
#define fors(i, a, b) for (int i = a; i >= b; --i)
#define fors2(i, a, b) for (ll i = a; i >= b; --i)
#define pqueue priority_queue
#define sqrt sqrtl
#define name "GDARTS"
#define want_digit(x) cout << fixed << setprecision(x);
#define excuting_time 1000.0 * clock() / CLOCKS_PER_SEC
using namespace std;
const int MOD = 1e9 + 7; // 998244353
const int inf = 1e9;
const ll INF = 1e18;
const int N = 1e3;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll random(const ll &L, const ll &R)
{
return uniform_int_distribution<ll> (L, R) (rng);
}
template <class X, class Y>
bool maximize(X &x, const Y &y)
{
return x < y ? x = y, true : false;
}
int n, m, a[N + 5], ans;
multiset <ll> se;
int get(int x)
{
multiset <ll>::iterator it = se.ub(m - x);
return *(prev(it));
}
void cook()
{
cin >> n >> m;
forw (i, 1, n) cin >> a[i];
se.insert(0);
se.insert(0);
forw (i, 1, n) se.insert(a[i]);
forw (i, 1, n) forw (j, i, n)
se.insert(a[i] + a[j]);
ans = get(m);
forw (i, 1, n)
{
forw (j, i, n)
{
int curr = a[i] + a[j] + get(a[i] + a[j]);
if (curr <= m)
maximize(ans, curr);
}
se.erase(se.find(a[i]));
forw (j, 1, i - 1) se.erase(se.find(a[i] + a[j]));
}
cout << ans << endl;
}
skibidi()
//rizz()
{
srand(time(NULL));
sigma;
if (fopen(name".INP", "r"))
{
freopen(name".INP", "r", stdin);
freopen(name".OUT", "w", stdout);
}
int numTest = 1;
// cin >> numTest;
while (numTest--)
{
cook();
}
stfu;
}
LyogQXV0aG9yczogVnUgSG9hbmcgQmFjaCBmcm9tIFBodW9jIEhvYSBTZWNvbmRhcnkgU2Nob29sICovCgovLyNwcmFnbWEgR0NDIG9wdGltaXplKCJPMyIsICJ1bnJvbGwtbG9vcHMiKQovLyNwcmFnbWEgR0NDIHRhcmdldCgiYXZ4MiIsICJibWkiLCAiYm1pMiIsICJsemNudCIsICJwb3BjbnQiKQoKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGRiIGxvbmcgZG91YmxlCi8vI2RlZmluZSBkb3VibGUgbGRiCiNkZWZpbmUgZGIgZG91YmxlCiNkZWZpbmUgdW5vbWFwIHVub3JkZXJlZF9tYXAKI2RlZmluZSB1bm9zZXQgdW5vcmRlcmVkX3NldAojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIHN0ciBzdHJpbmcKI2RlZmluZSBzdHJzdHIgc3RyaW5nc3RyZWFtCiNkZWZpbmUgc3ooYSkgKGludClhLnNpemUoKQojZGVmaW5lIGxsIGxvbmcgbG9uZwovLyNkZWZpbmUgaW50IGxsCiNkZWZpbmUgcGlpIHBhaXIgPGludCwgaW50PgojZGVmaW5lIHBsbCBwYWlyIDxsbCwgbGw+CiNkZWZpbmUgVW5pcXVlKGEpIGEucmVzaXplKHVuaXF1ZShhbGwoYSkpIC0gYS5iZWdpbigpKQojZGVmaW5lIHVsbCB1bnNpZ25lZCBsbAojZGVmaW5lIGZpciBmaXJzdAojZGVmaW5lIHNlYyBzZWNvbmQKI2RlZmluZSBpZGMgY2luLmlnbm9yZSgpCiNkZWZpbmUgbGIgbG93ZXJfYm91bmQKI2RlZmluZSB1YiB1cHBlcl9ib3VuZAojZGVmaW5lIGFsbChzKSBzLmJlZ2luKCksIHMuZW5kKCkKI2RlZmluZSByZXYgcmV2ZXJzZQojZGVmaW5lIHNpZ21hIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCksIGNpbi50aWUoMCksIGNvdXQudGllKDApOwojZGVmaW5lIHNraWJpZGkgaW50IG1haW4KI2RlZmluZSByaXp6IHNpZ25lZCBtYWluCiNkZWZpbmUgZ2NkIF9fZ2NkCiNkZWZpbmUgZm91bmQoYSwgbXApIG1wLmZpbmQoYSkgIT0gbXAuZW5kKCkKI2RlZmluZSBnYW1lX292ZXIgZXhpdCgwKTsKI2RlZmluZSBzdGZ1IHJldHVybiAwOwojZGVmaW5lIHN0b3AgYnJlYWs7CiNkZWZpbmUgcHVzaGIgcHVzaF9iYWNrCiNkZWZpbmUgcG9wYiBwb3BfYmFjawojZGVmaW5lIHB1c2hmIHB1c2hfZnJvbnQKI2RlZmluZSBwb3BmIHBvcF9mcm9udAojZGVmaW5lIG11bDJ4KGEsIHgpIGEgPDwgeAojZGVmaW5lIGRpdjJ4KGEsIHgpIGEgPj4geAojZGVmaW5lIG5vX2NoZWNrIGNvbnRpbnVlOwojZGVmaW5lIGxjbShhLCBiKSBhIC8gX19nY2QoYSwgYikgKiBiCiNkZWZpbmUgbG9nX2Jhc2UoeCwgYmFzZSkgbG9nKHgpIC8gbG9nKGJhc2UpCiNkZWZpbmUgZGVidWcgY2xvZyA8PCAiTm8gZXJyb3JzISI7IGdhbWVfb3ZlcjsKI2RlZmluZSBmb3J3KGksIGEsIGIpIGZvciAoaW50IGkgPSBhOyBpIDw9IGI7ICsraSkKI2RlZmluZSBmb3J3MihpLCBhLCBiKSBmb3IgKGxsIGkgPSBhOyBpIDw9IGI7ICsraSkKI2RlZmluZSBmb3JzKGksIGEsIGIpIGZvciAoaW50IGkgPSBhOyBpID49IGI7IC0taSkKI2RlZmluZSBmb3JzMihpLCBhLCBiKSBmb3IgKGxsIGkgPSBhOyBpID49IGI7IC0taSkKI2RlZmluZSBwcXVldWUgcHJpb3JpdHlfcXVldWUKI2RlZmluZSBzcXJ0IHNxcnRsCiNkZWZpbmUgbmFtZSAiR0RBUlRTIgojZGVmaW5lIHdhbnRfZGlnaXQoeCkgY291dCA8PCBmaXhlZCA8PCBzZXRwcmVjaXNpb24oeCk7CiNkZWZpbmUgZXhjdXRpbmdfdGltZSAxMDAwLjAgKiBjbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7IC8vIDk5ODI0NDM1Mwpjb25zdCBpbnQgaW5mID0gMWU5Owpjb25zdCBsbCBJTkYgPSAxZTE4Owpjb25zdCBpbnQgTiA9IDFlMzsKCm10MTk5MzdfNjQgcm5nKGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSk7CmxsIHJhbmRvbShjb25zdCBsbCAmTCwgY29uc3QgbGwgJlIpCnsKICAgIHJldHVybiB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248bGw+IChMLCBSKSAocm5nKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFgsIGNsYXNzIFk+CmJvb2wgbWF4aW1pemUoWCAmeCwgY29uc3QgWSAmeSkKewogICAgcmV0dXJuIHggPCB5ID8geCA9IHksIHRydWUgOiBmYWxzZTsKfQoKaW50IG4sIG0sIGFbTiArIDVdLCBhbnM7Cm11bHRpc2V0IDxsbD4gc2U7CgppbnQgZ2V0KGludCB4KQp7CiAgICBtdWx0aXNldCA8bGw+OjppdGVyYXRvciBpdCA9IHNlLnViKG0gLSB4KTsKICAgIHJldHVybiAqKHByZXYoaXQpKTsKfQoKdm9pZCBjb29rKCkKewogICAgY2luID4+IG4gPj4gbTsKICAgIGZvcncgKGksIDEsIG4pIGNpbiA+PiBhW2ldOwoKICAgIHNlLmluc2VydCgwKTsKICAgIHNlLmluc2VydCgwKTsKICAgIGZvcncgKGksIDEsIG4pIHNlLmluc2VydChhW2ldKTsKCiAgICBmb3J3IChpLCAxLCBuKSBmb3J3IChqLCBpLCBuKQogICAgICAgIHNlLmluc2VydChhW2ldICsgYVtqXSk7CgogICAgYW5zID0gZ2V0KG0pOwogICAgZm9ydyAoaSwgMSwgbikKICAgIHsKICAgICAgICBmb3J3IChqLCBpLCBuKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGN1cnIgPSBhW2ldICsgYVtqXSArIGdldChhW2ldICsgYVtqXSk7CiAgICAgICAgICAgIGlmIChjdXJyIDw9IG0pCiAgICAgICAgICAgICAgICBtYXhpbWl6ZShhbnMsIGN1cnIpOwogICAgICAgIH0KCiAgICAgICAgc2UuZXJhc2Uoc2UuZmluZChhW2ldKSk7CiAgICAgICAgZm9ydyAoaiwgMSwgaSAtIDEpIHNlLmVyYXNlKHNlLmZpbmQoYVtpXSArIGFbal0pKTsKICAgIH0KCiAgICBjb3V0IDw8IGFucyA8PCBlbmRsOwp9Cgpza2liaWRpKCkKLy9yaXp6KCkKewogICAgc3JhbmQodGltZShOVUxMKSk7CiAgICBzaWdtYTsKICAgIGlmIChmb3BlbihuYW1lIi5JTlAiLCAiciIpKQogICAgewogICAgICAgIGZyZW9wZW4obmFtZSIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihuYW1lIi5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBpbnQgbnVtVGVzdCA9IDE7Ci8vICAgIGNpbiA+PiBudW1UZXN0OwogICAgd2hpbGUgKG51bVRlc3QtLSkKICAgIHsKICAgICAgICBjb29rKCk7CiAgICB9CiAgICBzdGZ1Owp9Cg==