/*
  1   2   3   4   5   6   7   8   9  10
 10   9   8   7   6   5   4   3   2   1
 10  18  24  28  30  30  28  24  18  10
     28  52  80 110 140 168 192 210 220
*/

#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstdio>
using namespace std;
#define int long long
const int LINF=1e18;

int main(void){
	//N人の入力と修行の最大回数の入力
	int N,K;cin>>N>>K;
	//a[N]消化コストとf[N]（食べ物の食べにくさ
	vector<int> a(N),f(N);
	for(int i=0;i<N;i++)cin>>a[i];
	for(int i=0;i<N;i++)cin>>f[i];
	sort(a.begin(),a.end());
	sort(f.rbegin(),f.rend());
	int l=-1,r=LINF;
	while(r-l>1)
	{
		int m=(r+l)>>1;
		int cnt=0;
		for(int i=0;i<N;i++){
			if(a[i]*f[i]>m){
				cnt+=(a[i]*f[i]-m)/f[i];
				if((a[i]*f[i]-m)%f[i])cnt++;
			}
		}
		if(cnt>K)l=m;
		else r=m;
	}
	cout<<r<<endl;
	return 0;
}
/*
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int LINF=1e18;
 
signed main(){
  int N,K;cin>>N>>K;
  vector<int> a(N),f(N);
  for(int i=0;i<N;i++)cin>>a[i];
  for(int i=0;i<N;i++)cin>>f[i];
  sort(a.begin(),a.end());
  sort(f.rbegin(),f.rend());
  int l=-1,r=LINF;
  while(r-l>1){
    int m=(r+l)>>1;
    int cnt=0;
    for(int i=0;i<N;i++){
      if(a[i]*f[i]>m){
        cnt+=(a[i]*f[i]-m)/f[i];
        if((a[i]*f[i]-m)%f[i])cnt++;
      }
    }
    if(cnt>K)l=m;
    else r=m;
  }
  cout<<r<<endl;
}
*/