import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[] req;
static int budget;
public static void main(String... args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
req = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
req[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(req); <= for문에서 max값을 넣어줬으면 sort할 필요가 없었다!!
st = new StringTokenizer(br.readLine());
budget = Integer.parseInt(st.nextToken());
int start = 0;
int end = req[req.length - 1]; // 제일 큰 값
while (start <= end) {
int mid = (start + end) / 2;
int sum = 0;
for (int r : req) {
sum += Math.min(r, mid);
}
if(sum <= budget){ <= 부등호 = 를 넣어야 하는지 아닌지 너무 헷갈린다... 꼭 주의해서 깊게 생각하도록!!
start = mid + 1;
}else {
end = mid - 1;
}
}
System.out.println(end);
}
}