N,K=list(map(int,input().split()))

V=list(map(int,input().split()))

Vrev=V[::-1]

# 左からA個取る

# 右からB個取る

# A+B<=min(N,K)

# K-(A+B)個詰め直す。負の数で絶対値の大きいものから順に。



# A,Bを、0からA+B=min(N,K)まで全探索

MAX=min(N,K)

ans=0

for a in range(MAX+1):

  for b in range(MAX-a+1):

    jewels=V[:a]+Vrev[:b]

    jewels=sorted(jewels)

    drop=K-(a+b)

    for i in range(drop):

      if i>=len(jewels):

        break

      if jewels[i]>=0:

        break

      else:

        jewels[i]=0

    if ans<sum(jewels):

      ans=sum(jewels)

print(ans)
# 左から取り出すパターンは最大50通り

# 右から取り出すパターンは最大50通り

# その組み合わせは2500通り

# その全通りに対して、マイナスの石を引けるだけ引くパターンを試すと50

# 125000

# すべて試す



import sys

readline = sys.stdin.readline



N,K = list(map(int,readline().split()))

V = [0] + list(map(int,readline().split())) + [0]

N += 2

K += 2



leftsum = 0

leftminus = []

ans = -(10 ** 9)

for left in range(min(N,K)):

  leftsum += V[left]

  if V[left] < 0:

    leftminus += [V[left]]

  rightsum = 0

  rightminus = []

  limit = min(N - (left + 1) , K - (left + 1))

  for right in range(N - 1, N - limit - 1, -1):

    rightsum += V[right]

    if V[right] < 0:

      rightminus += [V[right]]

    allsum = leftsum + rightsum

    rest = max(K - ((left + 1) + (N - right)),0)

    allminus = sorted(leftminus + rightminus)

    allsum -= sum(allminus[:rest])

    if allsum > ans:

      ans = allsum

print(ans)
N, K = list(map(int, input().split()))
V = list(map(int, input().split()))
Vrev = V[::-1]
# 左からA個取る
# 右からB個取る
# A+B<=min(N,K)
# K-(A+B)個詰め直す。負の数で絶対値の大きいものから順に。
# A,Bを、0からA+B=min(N,K)まで全探索
MAX = min(N, K)
ans = 0
for a in range(MAX + 1):
    for b in range(MAX - a + 1):
        jewels = V[:a] + Vrev[:b]
        jewels = sorted(jewels)
        drop = K - (a + b)
        for i in range(drop):
            if i >= len(jewels):
                break
            if jewels[i] >= 0:
                break
            else:
                jewels[i] = 0
        if ans < sum(jewels):
            ans = sum(jewels)
print(ans)

# 左から取り出すパターンは最大50通り
# 右から取り出すパターンは最大50通り
# その組み合わせは2500通り
# その全通りに対して、マイナスの石を引けるだけ引くパターンを試すと50
# 125000
# すべて試す
import sys

readline = sys.stdin.readline
N, K = list(map(int, readline().split()))
V = [0] + list(map(int, readline().split())) + [0]
N += 2
K += 2
leftsum = 0
leftminus = []
ans = -(10**9)
for left in range(min(N, K)):
    leftsum += V[left]
    if V[left] < 0:
        leftminus += [V[left]]
    rightsum = 0
    rightminus = []
    limit = min(N - (left + 1), K - (left + 1))
    for right in range(N - 1, N - limit - 1, -1):
        rightsum += V[right]
        if V[right] < 0:
            rightminus += [V[right]]
        allsum = leftsum + rightsum
        rest = max(K - ((left + 1) + (N - right)), 0)
        allminus = sorted(leftminus + rightminus)
        allsum -= sum(allminus[:rest])
        if allsum > ans:
            ans = allsum
print(ans)

-N, K = list(map(int, input().split())) -V = list(map(int, input().split())) -Vrev = V[::-1] -# 左からA個取る -# 右からB個取る -# A+B<=min(N,K) -# K-(A+B)個詰め直す。負の数で絶対値の大きいものから順に。 -# A,Bを、0からA+B=min(N,K)まで全探索 -MAX = min(N, K) -ans = 0 -for a in range(MAX + 1): -    for b in range(MAX - a + 1): -        jewels = V[:a] + Vrev[:b] -        jewels = sorted(jewels) -        drop = K - (a + b) -        for i in range(drop): -            if i >= len(jewels): -                break -            if jewels[i] >= 0: -                break -            else: -                jewels[i] = 0 -        if ans < sum(jewels): -            ans = sum(jewels) +# 左から取り出すパターンは最大50通り +# 右から取り出すパターンは最大50通り +# その組み合わせは2500通り +# その全通りに対して、マイナスの石を引けるだけ引くパターンを試すと50 +# 125000 +# すべて試す +import sys + +readline = sys.stdin.readline +N, K = list(map(int, readline().split())) +V = [0] + list(map(int, readline().split())) + [0] +N += 2 +K += 2 +leftsum = 0 +leftminus = [] +ans = -(10**9) +for left in range(min(N, K)): +    leftsum += V[left] +    if V[left] < 0: +        leftminus += [V[left]] +    rightsum = 0 +    rightminus = [] +    limit = min(N - (left + 1), K - (left + 1)) +    for right in range(N - 1, N - limit - 1, -1): +        rightsum += V[right] +        if V[right] < 0: +            rightminus += [V[right]] +        allsum = leftsum + rightsum +        rest = max(K - ((left + 1) + (N - right)), 0) +        allminus = sorted(leftminus + rightminus) +        allsum -= sum(allminus[:rest]) +        if allsum > ans: +            ans = allsum