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

for i in range(min(N,K)+1): #i個の宝石を得る
    for a in range(i+1): #左からa個の宝石を得る
        b=i-a #右からb個の宝石を得る
        val=sorted(v[:a]+v[N-b:]) #宝石の価値の合計
        s=sum(val)
#        print(val)
        for j in range(0,min(K-i,len(val))): #j個の宝石を捨てる、上限はk-iか得た宝石の個数i
            if j<len(val):
#                print("#",a,b,min(K-i,len(val)),val)
                if val[j]<0: #負の宝石を捨てる
                    s-=val[j]
            else:
                break
#        print(a,b,min(K-i,len(val)),val,sum(val))
        ans=max(ans,s)
print(ans) 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 ans=0 ans 0 for i in range(min(N,K)+1): #i個の宝石を得る
    for a in range(i+1): #左からa個の宝石を得る
        b=i-a #右からb個の宝石を得る
        val=sorted(v[:a]+v[N-b:]) #宝石の価値の合計
        s=sum(val)
#        print(val)
        for j in range(0,min(K-i,len(val))): #j個の宝石を捨てる、上限はk-iか得た宝石の個数i
            if j<len(val):
#                print("#",a,b,min(K-i,len(val)),val)
                if val[j]<0: #負の宝石を捨てる
                    s-=val[j]
            else:
                break
#        print(a,b,min(K-i,len(val)),val,sum(val))
        ans=max(ans,s) i range(min(N,K)+1) range min(N,K)+1 min(N,K) min N K 1 for a in range(i+1): #左からa個の宝石を得る
        b=i-a #右からb個の宝石を得る
        val=sorted(v[:a]+v[N-b:]) #宝石の価値の合計
        s=sum(val)
#        print(val)
        for j in range(0,min(K-i,len(val))): #j個の宝石を捨てる、上限はk-iか得た宝石の個数i
            if j<len(val):
#                print("#",a,b,min(K-i,len(val)),val)
                if val[j]<0: #負の宝石を捨てる
                    s-=val[j]
            else:
                break
#        print(a,b,min(K-i,len(val)),val,sum(val))
        ans=max(ans,s) a range(i+1) range i+1 i 1 b=i-a b i-a i a val=sorted(v[:a]+v[N-b:]) val sorted(v[:a]+v[N-b:]) sorted v[:a]+v[N-b:] v[:a] v :a a v[N-b:] v N-b: N-b N b s=sum(val) s sum(val) sum val for j in range(0,min(K-i,len(val))): #j個の宝石を捨てる、上限はk-iか得た宝石の個数i
            if j<len(val):
#                print("#",a,b,min(K-i,len(val)),val)
                if val[j]<0: #負の宝石を捨てる
                    s-=val[j]
            else:
                break
#        print(a,b,min(K-i,len(val)),val,sum(val))
         j range(0,min(K-i,len(val))) range 0 min(K-i,len(val)) min K-i K i len(val) len val if j<len(val):
#                print("#",a,b,min(K-i,len(val)),val)
                if val[j]<0: #負の宝石を捨てる
                    s-=val[j]
            else:
                break
#        print(a,b,min(K-i,len(val)),val,sum(val))
         j<len(val) j len(val) len val if val[j]<0: #負の宝石を捨てる
                    s-=val[j]
             val[j]<0 val[j] val j 0 s-=val[j] s val[j] val j break ans=max(ans,s) ans max(ans,s) max ans s print(ans) print ans val=sorted(v[:a]+v[N-b:]) sorted(v[:a]+v[N-b:]) val N,K=map(int,input().split()) map(int,input().split()) N s-=val[j] val[j] s ans=0 0 ans b=i-a i-a b ans=max(ans,s) max(ans,s) ans v=list(map(int,input().split())) list(map(int,input().split())) v K=map(int,input().split()) map(int,input().split()) K s=sum(val) sum(val) s
N,K=map(int,input().split())
v=list(map(int,input().split()))
ans=0

for i in range(min(N,K)+1): #i個の宝石を得る
    for a in range(i+1): #左からa個の宝石を得る
        b=i-a #右からb個の宝石を得る
        val=sorted(v[:a]+v[N-b:]) #宝石の価値の合計
        s=sum(val)
#        print(val)
        for j in range(0,min(K-i,len(val))): #j個の宝石を捨てる、上限はk-iか得た宝石の個数i
            if j<len(val):
#                print("#",a,b,min(K-i,len(val)),val)
                if val[j]<0: #負の宝石を捨てる
                    s-=val[j]
            else:
                break
#        print(a,b,min(K-i,len(val)),val,sum(val))
        ans=max(ans,s)
print(ans)
