/*
注意k的精度!!!!!!!!!!!
注意k的精度!!!!!!!!!!!
注意k的精度!!!!!!!!!!!
注意k的精度!!!!!!!!!!!
注意k的精度!!!!!!!!!!!
*/
#include <iostream>
#include <cstring>
#include <unordered_map>
#include <algorithm>
using namespace std;
const int N = 1e4+10;
struct Moon{
double weight;
double sale;
double ave;
}moon[N];
int n;
double k;
int main()
{
cin >> n >> k;
for(int i = 0;i < n;i++)
{
cin >> moon[i].weight ;
}
for(int i = 0;i < n;i++)
{
cin >> moon[i].sale;
moon[i].ave = moon[i].sale * 1.0 / moon[i].weight;
}
sort(moon,moon+n,[](Moon m1,Moon m2){
return m1.ave > m2.ave;
});
double sum = 0;
for(int i = 0;i < n;i++)
{
if(moon[i].weight < k)
{
k -= moon[i].weight;
sum += moon[i].sale;
}
else
{
sum += k * 1.0 * moon[i].ave;
break;
}
}
printf("%.2lf\n",sum);
return 0;
}