#include <bits/stdc++.h>
using namespace std;
int n;
long long int k;
int a[1000005],f[1000005];
bool cmp(int a,int b)
{
	return a>b;
}
int mmax(long long a,long long b)
{
	if(a>b)return a;
	return b;
}
bool check(long long mid)
{
	long long cnt=0;
	int i;
	for(i=1;i<=n;i++)
	{
		if(a[i]*f[i]>mid)
		{
			if((a[i]*f[i]-mid)%f[i]==0)cnt+=(a[i]*f[i]-mid)/f[i];
			else cnt+=(a[i]*f[i]-mid)/f[i]+1;
		}
	}
	return cnt<=k;
}
int main()
{
	cin>>n>>k;
	int i;
	for(i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
	}
	for(i=1;i<=n;i++)
	{
		scanf("%lld",&f[i]);
	}
	sort(a+1,a+n+1);
	sort(f+1,f+n+1,cmp);
	int l=0,r=1e12,mid;
	while(l<r)
	{
		mid=(l+r)/2;
		if(check(mid))
		{
			r=mid;
		}
		else
		{
			l=mid+1;
		}
	}
	cout<<l;
	return 0; 
}