from collections import deque
n,k=map(int,input().split())
v=list(map(int,input().split()))
cs_l=[0]
cs_r=[0]
cs1,cs2=0,0
for i in range(n):
  cs1+=v[i]
  cs2+=v[-i-1]
  cs_l.append(cs1)
  cs_r.append(cs2)

ans=0
for i in range(1,k+1):# 取得する操作をi回行う
  for l in range(i+1): # 左からl個取る
    r=i-l
    if r+l>=n:
      point=cs_r[-1]
      minus=[vi for vi in v if vi<0]
      n_minus=min(n-k,len(minus))
    else:
      point=cs_l[l]+cs_r[r]
      minus=[vi for vi in v[:l] if vi<0]
      if r>0:
        minus+=[vi for vi in v[-r:] if vi<0]
      n_minus=min(k-r-l,len(minus))
    if n_minus>0:
      minus.sort()
      point-=sum(minus[:n_minus])
    ans=max(ans,point)

print(ans)
 from collections import deque n,k=map(int,input().split()) n map(int,input().split()) map int input().split() ().split () input split k v=list(map(int,input().split())) v list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split cs_l=[0] cs_l [0] 0 cs_r=[0] cs_r [0] 0 cs1,cs2=0,0 cs1 0 cs2 0 for i in range(n):
  cs1+=v[i]
  cs2+=v[-i-1]
  cs_l.append(cs1)
  cs_r.append(cs2) i range(n) range n cs1+=v[i] cs1 v[i] v i cs2+=v[-i-1] cs2 v[-i-1] v -i-1 -i i 1 cs_l.append(cs1) cs_l.append cs_l append cs1 cs_r.append(cs2) cs_r.append cs_r append cs2 ans=0 ans 0 for i in range(1,k+1):# 取得する操作をi回行う
  for l in range(i+1): # 左からl個取る
    r=i-l
    if r+l>=n:
      point=cs_r[-1]
      minus=[vi for vi in v if vi<0]
      n_minus=min(n-k,len(minus))
    else:
      point=cs_l[l]+cs_r[r]
      minus=[vi for vi in v[:l] if vi<0]
      if r>0:
        minus+=[vi for vi in v[-r:] if vi<0]
      n_minus=min(k-r-l,len(minus))
    if n_minus>0:
      minus.sort()
      point-=sum(minus[:n_minus])
    ans=max(ans,point) i range(1,k+1) range 1 k+1 k 1 for l in range(i+1): # 左からl個取る
    r=i-l
    if r+l>=n:
      point=cs_r[-1]
      minus=[vi for vi in v if vi<0]
      n_minus=min(n-k,len(minus))
    else:
      point=cs_l[l]+cs_r[r]
      minus=[vi for vi in v[:l] if vi<0]
      if r>0:
        minus+=[vi for vi in v[-r:] if vi<0]
      n_minus=min(k-r-l,len(minus))
    if n_minus>0:
      minus.sort()
      point-=sum(minus[:n_minus])
    ans=max(ans,point) l range(i+1) range i+1 i 1 r=i-l r i-l i l if r+l>=n:
      point=cs_r[-1]
      minus=[vi for vi in v if vi<0]
      n_minus=min(n-k,len(minus))
    else:
      point=cs_l[l]+cs_r[r]
      minus=[vi for vi in v[:l] if vi<0]
      if r>0:
        minus+=[vi for vi in v[-r:] if vi<0]
      n_minus=min(k-r-l,len(minus))
     r+l>=n r+l r l n point=cs_r[-1] point cs_r[-1] cs_r -1 vi for vi in v if vi<0 for vi in v if vi<0 vi v vi<0 vi 0 if vi<0 vi minus=[vi for vi in v if vi<0] minus [vi for vi in v if vi<0] n_minus=min(n-k,len(minus)) n_minus min(n-k,len(minus)) min n-k n k len(minus) len minus point=cs_l[l]+cs_r[r] point cs_l[l]+cs_r[r] cs_l[l] cs_l l cs_r[r] cs_r r vi for vi in v[:l] if vi<0 for vi in v[:l] if vi<0 vi v[:l] v :l l vi<0 vi 0 if vi<0 vi minus=[vi for vi in v[:l] if vi<0] minus [vi for vi in v[:l] if vi<0] if r>0:
        minus+=[vi for vi in v[-r:] if vi<0]
       r>0 r 0 vi for vi in v[-r:] if vi<0 for vi in v[-r:] if vi<0 vi v[-r:] v -r: -r r vi<0 vi 0 if vi<0 vi minus+=[vi for vi in v[-r:] if vi<0] minus [vi for vi in v[-r:] if vi<0] n_minus=min(k-r-l,len(minus)) n_minus min(k-r-l,len(minus)) min k-r-l k-r k r l len(minus) len minus if n_minus>0:
      minus.sort()
      point-=sum(minus[:n_minus])
     n_minus>0 n_minus 0 minus.sort() minus.sort minus sort point-=sum(minus[:n_minus]) point sum(minus[:n_minus]) sum minus[:n_minus] minus :n_minus n_minus ans=max(ans,point) ans max(ans,point) max ans point print(ans) print ans cs_l=[0] [0] cs_l cs1+=v[i] v[i] cs1 minus+=[vi for vi in v[-r:] if vi<0] [vi for vi in v[-r:] if vi<0] minus v=list(map(int,input().split())) list(map(int,input().split())) v minus=[vi for vi in v if vi<0] [vi for vi in v if vi<0] minus cs2+=v[-i-1] v[-i-1] cs2 k=map(int,input().split()) map(int,input().split()) k cs2=0,0 0 cs2 ans=max(ans,point) max(ans,point) ans ans=0 0 ans n_minus=min(k-r-l,len(minus)) min(k-r-l,len(minus)) n_minus point-=sum(minus[:n_minus]) sum(minus[:n_minus]) point cs_r=[0] [0] cs_r point=cs_l[l]+cs_r[r] cs_l[l]+cs_r[r] point n,k=map(int,input().split()) map(int,input().split()) n point=cs_r[-1] cs_r[-1] point r=i-l i-l r cs1,cs2=0,0 0 cs1 minus=[vi for vi in v[:l] if vi<0] [vi for vi in v[:l] if vi<0] minus n_minus=min(n-k,len(minus)) min(n-k,len(minus)) n_minus
from collections import deque
n,k=map(int,input().split())
v=list(map(int,input().split()))
cs_l=[0]
cs_r=[0]
cs1,cs2=0,0
for i in range(n):
  cs1+=v[i]
  cs2+=v[-i-1]
  cs_l.append(cs1)
  cs_r.append(cs2)

ans=0
for i in range(1,k+1):# 取得する操作をi回行う
  for l in range(i+1): # 左からl個取る
    r=i-l
    if r+l>=n:
      point=cs_r[-1]
      minus=[vi for vi in v if vi<0]
      n_minus=min(n-k,len(minus))
    else:
      point=cs_l[l]+cs_r[r]
      minus=[vi for vi in v[:l] if vi<0]
      if r>0:
        minus+=[vi for vi in v[-r:] if vi<0]
      n_minus=min(k-r-l,len(minus))
    if n_minus>0:
      minus.sort()
      point-=sum(minus[:n_minus])
    ans=max(ans,point)

print(ans)

