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

ans = 0

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

        # a+b>Nとなるような操作は実現不可能
        if a + b > N:
            continue

        # 左からa個、右からb個取り出す
        get = []
        get += V[:a]
        get += list(reversed(V))[:b]
        # (a+b)回操作した時点でのスコア
        tmp = sum(get)

        # まだ操作出来るなら、負の数を取り除く
        get.sort()
        for i in range(min(K - a - b, len(get))):
            if get[i] < 0:
                tmp += -get[i]
        ans = max(ans, tmp)

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 a in range(K + 1):
    for b in range(K - a + 1):

        # a+b>Nとなるような操作は実現不可能
        if a + b > N:
            continue

        # 左からa個、右からb個取り出す
        get = []
        get += V[:a]
        get += list(reversed(V))[:b]
        # (a+b)回操作した時点でのスコア
        tmp = sum(get)

        # まだ操作出来るなら、負の数を取り除く
        get.sort()
        for i in range(min(K - a - b, len(get))):
            if get[i] < 0:
                tmp += -get[i]
        ans = max(ans, tmp) a range(K + 1) range K + 1 K 1 for b in range(K - a + 1):

        # a+b>Nとなるような操作は実現不可能
        if a + b > N:
            continue

        # 左からa個、右からb個取り出す
        get = []
        get += V[:a]
        get += list(reversed(V))[:b]
        # (a+b)回操作した時点でのスコア
        tmp = sum(get)

        # まだ操作出来るなら、負の数を取り除く
        get.sort()
        for i in range(min(K - a - b, len(get))):
            if get[i] < 0:
                tmp += -get[i]
        ans = max(ans, tmp) b range(K - a + 1) range K - a + 1 K - a K a 1 if a + b > N:
            continue

        # 左からa個、右からb個取り出す
         a + b > N a + b a b N continue get = [] get [] get += V[:a] get V[:a] V :a a get += list(reversed(V))[:b] get list(reversed(V))[:b] (reversed(V)) list reversed(V) reversed V :b b tmp = sum(get) tmp sum(get) sum get get.sort() get.sort get sort for i in range(min(K - a - b, len(get))):
            if get[i] < 0:
                tmp += -get[i]
         i range(min(K - a - b, len(get))) range min(K - a - b, len(get)) min K - a - b K - a K a b len(get) len get if get[i] < 0:
                tmp += -get[i]
         get[i] < 0 get[i] get i 0 tmp += -get[i] tmp -get[i] get[i] get i ans = max(ans, tmp) ans max(ans, tmp) max ans tmp print(ans) print ans K = map(int, input().split()) map(int, input().split()) K tmp += -get[i] -get[i] tmp get = [] [] get ans = max(ans, tmp) max(ans, tmp) ans get += list(reversed(V))[:b] list(reversed(V))[:b] get get += V[:a] V[:a] get tmp = sum(get) sum(get) tmp N, K = map(int, input().split()) map(int, input().split()) N V = list(map(int, input().split())) list(map(int, input().split())) V ans = 0 0 ans
N, K = map(int, input().split())
V = list(map(int, input().split()))

ans = 0

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

        # a+b>Nとなるような操作は実現不可能
        if a + b > N:
            continue

        # 左からa個、右からb個取り出す
        get = []
        get += V[:a]
        get += list(reversed(V))[:b]
        # (a+b)回操作した時点でのスコア
        tmp = sum(get)

        # まだ操作出来るなら、負の数を取り除く
        get.sort()
        for i in range(min(K - a - b, len(get))):
            if get[i] < 0:
                tmp += -get[i]
        ans = max(ans, tmp)

print(ans)
