import sys
input = sys.stdin.readline
K, N = map(int, input().split())
#랜선 길이를 저장할 빈 리스트를 만들어둔다
line = []
#k번 for문을 돌며 랜선들을 저장한다
for i in range(K):
num = int(input())
line.append(num)
#이분탐색을 하는 조건을 설정한다
#start는 가장 작은 값인 1로 한다
start = 1
end = max(line) # 가장 긴 랜선을 마지막 탐색 범위로 한다
while start <= end:
#mid로 랜선 길이를 갱신해나간다
mid = (start + end) // 2
#count는 만들어질 수 있는 잘린 랜선의 길이다. 초기값은 0으로 한다
count = 0
# mid 길이로 잘랐을 때 만들 수 있는 랜선 개수 계산한다
for x in line:
count += x // mid
# N개 이상 만들 수 있으면 mid를 더 늘릴 수 있다
if count >= N:
start = mid + 1
else:
end = mid - 1
print(end)
#문제 푸는 방식은 여러가지가 있는 것 같던데 완전탐색으로 했다
#DP방식은 잘 모르겠다....
N = int(input())
L = list(map(int, input().split()))
J = list(map(int, input().split()))
max_joy = 0 # 최대 기쁨 저장할 변수
def dfs(index, hp, joy):
global max_joy
# 체력이 0 이하가 될 시 아예 죽는다
if hp <= 0:
return
# 안 죽고 살 시 값이 갱신된다
max_joy = max(max_joy, joy)
# 모든 사람을 다 고려했다면 종료한다
if index == N:
return
# 1.index번 사람에게 인사하는 경우
dfs(index + 1, hp - L[index], joy + J[index])
# 2. index번 사람에게 인사하지 않는 경우
dfs(index + 1, hp, joy)
# 초기 (첫 사람부터, 체력 100, 기쁨 0)
dfs(0, 100, 0)
print(max_joy)