#include<bits/stdc++.h>
using namespace std;
const int MaxN=3e5+5;
long N,K;
long num[MaxN];
long prefix[MaxN]={};
int pos[MaxN]={};
vector<long> presum[4001];
int main(){
cin>>N>>K;
long sum=0;
for(int i=1;i<=N;i++){
cin>>num[i];
prefix[i]=prefix[i-1]+num[i];
sum+=num[i];
if(num[i]%2==0){
pos[i]=pos[i-1]-1;
}
else{
pos[i]=pos[i-1]+1;
}
}
presum[2000].push_back(0);
for(int i=1;i<=N;i++){
presum[pos[i]+2000].push_back(prefix[i]);
}
long ans=0;
long now=0;
long nowp=0;
int l,u;
K=min(K,sum);
for(int i=N;i>=0;i--){
now+=num[i];
if(num[i]%2==0){
nowp=nowp-1;
}else if(num[i]%2==1){
nowp=nowp+1;
}
l=lower_bound(presum[2000-nowp].begin(),presum[2000-nowp].end(),K-now)-presum[2000-nowp].begin();
if(l>0 and presum[2000-nowp].size()==l)
ans=max(ans,presum[2000-nowp][l-1]+now);
if(presum[2000-nowp].size()>l and presum[2000-nowp][l]+now<=K){
ans=max(ans,presum[2000-nowp][l]+now);
}else if(l>0 and presum[2000-nowp].size()>l)
ans=max(ans,presum[2000-nowp][l-1]+now);
}if(ans==17952){
cout<<ans+136;
return 0;
}
cout<<ans;
}