/* 此种题目出了数组下标定义为整形,其他一律定义为float,不要相信题目 */
#include <iostream>
#include <string>
#include <cstdio>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int Max_Price(float price[], int n)
{
int maxpos(0);
float maxprice = price[0];
for (int i = 1; i < n; ++i)
{
if (maxprice < price[i])
{
maxprice = price[i];
maxpos = i;
}
}
return maxpos;
}
int main()
{
int N, D;
cin >> N >> D;
float storage[N] = {0}; // 题目说整形是在挖坑,一定要定义为float,不然测试点2失败
for (int i = 0; i < N; ++i)
{
cin >> storage[i];
}
float price[N] = {0};
for (int i = 0; i < N; ++i)
{
float total;
cin >> total;
price[i] = total / storage[i];
}
float sum(0);
while (D > 0) // 当D大于库存量时也可以计算
{
int maxpos = Max_Price(price, N);
if (D >= storage[maxpos])
{
sum += (storage[maxpos] * price[maxpos]);
} else
{
sum += (D * price[maxpos]);
}
price[maxpos] = 0; // 将已经卖出的单价定为0
D -= storage[maxpos];
}
printf("%.2f", sum);
return 0;
}