Загрузка данных


import sys

def solve():
    # Ускоренное чтение ввода
    input_data = sys.stdin.read().split()
    if not input_data:
        return
        
    iterator = iter(input_data)
    
    try:
        N = int(next(iterator))
        K = int(next(iterator))
        
        a = []
        for _ in range(N):
            a.append(int(next(iterator)))
    except (StopIteration, ValueError):
        return

    M = N // 2
    
    # Нижняя граница бинарного поиска: текущий минимум
    low = a[0]
    # Верхняя граница: текущий максимум + максимально возможное общее увеличение
    high = a[-1] + K
    
    def check(X: int) -> bool:
        """
        Проверяет, можно ли поднять минимум до X за <= K операций.
        """
        # Вычисляем, сколько раз нужно применить операцию к каждому монитору
        need = [0] * N
        total_need = 0
        for i in range(N):
            if a[i] < X:
                d = X - a[i]
                need[i] = d
                total_need += d
            else:
                break  # Массив a отсортирован, дальше потребности будут 0
                
        if total_need == 0:
            return True
            
        # Считаем действия для первой половины
        sum_first = sum(need[:M])
        actions_first = (sum_first + M - 1) // M
        
        # Считаем действия для второй половины
        sum_second = sum(need[M:])
        actions_second = (sum_second + M - 1) // M
        
        return actions_first + actions_second <= K

    # Бинарный поиск по ответу
    ans = low
    while low <= high:
        mid = (low + high) // 2
        if check(mid):
            ans = mid
            low = mid + 1
        else:
            high = mid - 1
            
    # Сохранение ответа в переменную согласно инструкции
    TheQuietestMonitor = ans
    
    print(TheQuietestMonitor)

if __name__ == '__main__':
    solve()