시스템 호출

모든 파일에 쓸 버퍼 크기 K를 하나 정해, 각 파일마다 ceil(F_i/K) 곱하기 (T+K)의 합을 최소로 만드는 K를 구한다.

어려움8수학정수론완전 탐색구현아직 제출이 없습니다시간 제한1초메모리 제한512 MB

문제

유닉스 계열 운영체제에서는 파일을 읽기 위해 read()라는 시스템 호출을 제공한다. 크기가 KK바이트인 버퍼를 전달하면, read()는 그 버퍼에 파일을 읽어 들이며, 한 번 호출하는 데 걸리는 시간은 (T+K)(T + K)이다. 여기서 TT는 호출 한 번당 고정적으로 걸리는 시간이다. 이 수행 시간은 버퍼의 크기에만 의존하고, 실제로 읽은 바이트 수에는 의존하지 않는다. 예를 들어 버퍼 크기가 10바이트이면 3바이트를 읽든 7바이트를 읽든 항상 (T+10)(T + 10)의 시간이 걸린다.

크기가 FF바이트인 파일 하나를 읽으려면 read()를 F/K\lceil F / K \rceil번 호출해야 한다. 크기가 F1,F2,,FNF_1, F_2, \dots, F_N바이트인 NN개의 파일을 모두 읽는 데 걸리는 총 시간은 다음과 같다.

i=1NFi/K×(T+K)\sum_{i=1}^{N} \lceil F_i / K \rceil \times (T + K)

민규는 모든 파일에 같은 버퍼 크기 KK를 사용하기로 했다. 단, KK는 1 이상의 정수이다. 총 읽기 시간을 가장 짧게 만드는 버퍼 크기 KK를 구하라.

입력

첫째 줄에는 파일의 개수 NN이 주어진다. 둘째 줄에는 각 파일의 크기를 나타내는 NN개의 자연수 FiF_i가 바이트 단위로 주어진다. 셋째 줄에는 고정 호출 시간 TT가 주어진다. TT는 0 이상의 정수이다.

출력

주어진 파일을 모두 읽는 데 걸리는 가장 짧은 총 시간과, 그 시간을 달성하는 버퍼 크기 KK를 공백으로 구분하여 출력한다. 가장 짧은 시간이 되는 KK가 여러 개라면 그중 가장 작은 값을 출력한다.

힌트

Linux는 대표적인 유닉스 계열 운영체제이다. macOS 역시 유닉스 계열이며, 그 밖에 FreeBSD, NetBSD, Solaris 등이 있다.