1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <bits/stdc++.h>
using namespace std;
const long long inf=4000000000000000000LL;
int n,i,k,b[77];
long long m,a[202],s[202],f[202][202][77][2];
bool u[202][202][77][2];
long long F(int l, int r, int k, int ls) {
  if (k<0) return (l==r)?0:-inf;
  if (u[l][r][k][ls]) return f[l][r][k][ls];
  u[l][r][k][ls]=true;
  long long& res=f[l][r][k][ls];
  if (r-l+1>(1LL<<(k+1))) return res=-inf;
  res=F(l,r,k-1,int(ls==1 || b[k]==1));
  if (ls==1 || b[k]==1) {
    long long cur=F(l,r,k-1,ls);
    if (cur>-inf) res=max(res,cur+s[r]-s[l-1]);
    for (int j=l; j<r; j++) {
      cur=F(l,j,k-1,1);
      if (cur>-inf) {
        long long rgh=F(j+1,r,k-1,ls);
        if (rgh>-inf) res=max(res,cur+rgh+s[r]-s[j]);
      }
    }
  }
  //printf("%d %d %d %d = %I64d\n",l,r,k,ls,res);
  return res;
}
int main() {
  cin>>n>>m;
  for (i=1; i<=n; i++) {
    cin>>a[i];
    s[i]=s[i-1]+a[i];
  }
  for (k=0; m>0; m/=2, k++) b[k]=(m&1);
  cout<<F(1,n,k-1,0);
  return 0;
}