link
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct M {
double t,p,u;
}m[100010];
bool cmp(M a,M b) {
return a.u>b.u;
}
int main() {
int typeN, demandTon;
cin >> typeN >> demandTon;
for (int i = 0; i < typeN; i++) {
cin >> m[i].t;
}
for (int i = 0; i < typeN; i++) {
cin >> m[i].p;
}
for (int i = 0; i < typeN; i++) {
m[i].u=m[i].p/m[i].t;
}
sort(m,m+typeN,cmp);
double sumP = 0;
double tmp_d = demandTon;
for (int i = 0; i < typeN; i++) {
if (m[i].t <demandTon) {
sumP += m[i].p;
demandTon -= m[i].t;
}
else {
sumP += demandTon * m[i].u;
break;
}
}
printf("%.2f", sumP);
return 0;
}