### BUGGY CODE ###

import itertools
import copy


class Deque:
    def __init__(self, default_deque: list):
        self.in_hand = []
        self.deque = default_deque

    def operation(self, operation_type: str):
        if operation_type == "A":
            self.in_hand.append(self.deque[0])
            del self.deque[0]
        elif operation_type == "B":
            self.in_hand.append(self.deque[-1])
            del self.deque[-1]
        elif operation_type == "C":
            if min(self.in_hand) < 0:
                _index = self.in_hand.index(min(self.in_hand))
                del self.in_hand[_index]
            else:
                return True


if __name__ == '__main__':
    max_repeat_count = int(input().split()[1])
    value_list = list(map(int, input().split()))
    point_list = []
    for repeat_count in range(max_repeat_count+1):
        operation_pattern_iter = itertools.product(["A", "B"], repeat=repeat_count)
        for operation_pattern in operation_pattern_iter:
            deque = Deque(copy.copy(value_list))
            for operation in operation_pattern:
                try:
                    deque.operation(operation)
                except:
                    break
            else:
                for remove in range(max_repeat_count - repeat_count):
                    try:
                        if deque.operation("C"):
                            point_list.append(sum(deque.in_hand))
                            break
                    except:
                        point_list.append(sum(deque.in_hand))
                        break
                else:
                    point_list.append(sum(deque.in_hand))
    print(max(point_list))



### FIXED CODE ###

import itertools
import copy


class Deque:
    def __init__(self, default_deque: list, max_count: int):
        self.in_hand = []
        self.deque = default_deque
        self.operation_count = 0
        self.max_count = max_count

    def operation(self, operation_type: str):
        if operation_type == "A":
            self.in_hand.append(self.deque[0])
            del self.deque[0]
            self.operation_count += 1
        elif operation_type == "B":
            self.in_hand.append(self.deque[-1])
            del self.deque[-1]
            self.operation_count += 1
        elif operation_type == "C":
            self.in_hand.sort()
            for i in range(self.max_count - self.operation_count):
                if self.in_hand[0] < 0:
                    del self.in_hand[0]
                else:
                    return


if __name__ == '__main__':
    max_repeat_count = int(input().split()[1])
    value_list = list(map(int, input().split()))
    point_list = []
    for repeat_count in range(max_repeat_count+1):
        operation_pattern_iter = itertools.combinations_with_replacement(["A", "B"], repeat_count)
        for operation_pattern in operation_pattern_iter:
            deque = Deque(copy.copy(value_list), max_repeat_count)
            for operation in operation_pattern:
                try:
                    deque.operation(operation)
                except:
                    break
            else:
                try:
                    deque.operation("C")
                    point_list.append(sum(deque.in_hand))
                except:
                    point_list.append(sum(deque.in_hand))
                    break
    print(max(point_list))