#include<bits/stdc++.h>
#define int long long
#define maxn 1000
using namespace std;
int n,T;
int a[maxn];
int cnt1=0,cnt2=0,ans=0,mid;
int sum1[1<<25],sum2[1<<25];
void dfs1(int st,int ed,int sum) {
if(sum>T) return ;
if(st>ed) {
if(sum<T) sum1[++cnt1]=sum;
return ;
}
dfs1(st+1,ed,sum);dfs1(st+1,ed,sum+a[st]);
}
void dfs2(int st,int ed,int sum) {
if(sum>T) return ;
if(st>ed) {
if(sum<T) sum2[++cnt2]=sum;
return ;
}
dfs2(st+1,ed,sum);dfs2(st+1,ed,sum+a[st]);
}
signed main(){
scanf("%lld %lld",&n,&T);mid=n>>1;
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
dfs1(1,mid,0);dfs2(mid+1,n,0);
sort(sum1+1,sum1+cnt1+1);
for(int i=1;i<=cnt2;i++) {
int num=upper_bound(sum1+1,sum1+cnt1+1,T-sum2[i])-sum1-1;
ans=max(ans,sum2[i]+sum1[num]);
}
printf("%lld",ans);
return 0;
}