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()