N = int(input())
array = list(map(int, input().split()))
M = int(input())
start = 1
end = max(array)
while start <= end:
mid = (start + end) // 2
total = 0
for i in array:
if mid >= i:
total += i
else:
total += mid
if total <= M:
start = mid + 1
result = mid
else:
end = mid - 1
print(result)
배정 예산의 최대값을 mid로 설정한 후 이진 탐색을 수행한다.
특정 예산으로 배정 예산의 최대값이 정해지고 그것을 통해 배정한 총 예산이 입력된 정해진 예산보다 작으면 그 때의 mid를 result로 출력한다.