![AC](https://i-blog.csdnimg.cn/blog_migrate/00b602a764b0fc5b9fd2771327ed8d36.png)
#include <stdio.h>
#include <stdlib.h>
typedef struct {
double inv, price;
} mooncake;
int cmp(const void *a, const void *b) {
mooncake cake1 = *(mooncake *)a;
mooncake cake2 = *(mooncake *)b;
return (cake2.price / cake2.inv - cake1.price / cake1.inv) > 0 ? 1 : -1;
}
int main() {
int N, D;
scanf("%d %d", &N, &D);
mooncake cake[N];
for(int i = 0; i < N; i++)
scanf("%lf", &cake[i].inv);
for(int i = 0; i < N; i++)
scanf("%lf", &cake[i].price);
qsort(cake, N, sizeof(mooncake), cmp);
double income = 0.0;
for(int i = 0; D > 0 && i < N; i++) {
if(D <= cake[i].inv) {
income += cake[i].price / cake[i].inv * D;
} else {
income += cake[i].price;
}
D -= cake[i].inv;
}
printf("%.2f\n", income);
return 0;
}