#include<iostream>
#include<string>
#include<cctype>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
struct d {
double q;
double lr;//利润
double bl;//比率
};
bool cmp(d a, d b) {
return a.bl > b.bl;
}
int main() {
#ifdef LOCAL
freopen("d:\\datain.txt", "r", stdin);
//freopen("d:\\dataout.txt", "w", stdout);
#endif LOCAL
vector<d> data;
int n, D;
cin >> n >> D;
//cout << n << " " << D << endl;
for (int i = 0; i <n; i++) {
d d1;
scanf("%lf", &d1.q);
data.push_back(d1);
}
for (int i = 0; i <n; i++) {
scanf("%lf", &data[i].lr);
data[i].bl = (double)data[i].lr / data[i].q;
}
sort(data.begin(), data.end(), cmp);
//for (int i = 0; i < data.size(); i++) {
// cout << data[i].bl << endl;
//}
double msy = 0;
for (int i = 0; i < data.size(); i++) {
if (D >= data[i].q) {
msy += data[i].lr;
D = D - data[i].q;
}
else if (D > 0 && D < data[i].q) {
msy += data[i].bl*D;
break;
}
//if (D == 0||i==data.size()-1) {
// printf("%.2f", msy);
// break;
//}
}
printf("%.2f", msy);
}