n,k=gets.split.map(&:to_i)
a=gets.split.map(&:to_i).sort
f=gets.split.map(&:to_i).sort.reverse
l=-1
r=a[-1]*f[0]
while l+1<r
  m=(l+r)/2
  c=0
  n.times do |i|
    if a[i]*f[i]>m
      c+=a[i]-m/f[i]
    end
  end
  if c>k
    l=m
  else
    r=m
  end
end
puts r