#include <bits/stdc++.h>
using namespace std;

int main(){
  long long N,K;
  cin >> N >> K;
  vector<long long> A(N),F(N);
  for(int i=0;i<N;i++)  cin >> A.at(i);
  for(int i=0;i<N;i++)  cin >> F.at(i);

  sort(A.begin(),A.end());
  sort(F.begin(),F.end(),greater<long long>());
  long long ng=-1;
  long long ok=1e13;
  while(ok-ng>1){
    long long mid=(ng+ok)/2;
    
    long long count=0;
    for(int i=0;i<N;i++){
      long long tmp=mid/F.at(i);
      count+=max((long long)0,A.at(i)-tmp);
    }
    if(count<=K)  ok=mid;
    else  ng=mid;
  }
  cout << ok << endl;

	return 0;
}
