发放奖金
题号:NC214736
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

invoker 因为在明向超市的销售部门表现突出,不久就被升职为超市经理(以后早上买包子就可以找温柔的 invoker 了),这样超市的业务工作和人事工作就都要由 invoker 来处理了。
invoker 上任之后做的第一件事情就是为员工们发放奖金。超市现有 n 位员工,分别编号为 1,2,3,4,...。考勤部门每月会记录员工们的出色表现和不良表现。设第 i 位员工当月有 A[i] 条出色表现,有 B[i] 条不良表现。为了培养员工们的团队意识,其他人的表现也会影响到自己拿到的奖金。invoker 为每位员工发放奖金的规则是:设置基础奖金为 m 元,将员工重新排序。排序后的第 i 位员工拿到的奖金为

宅心仁厚的 invoker 希望通过给员工重新排序使他发给员工的奖金总额最大,你能告诉 invoker 最多可以发出多少奖金吗?

输入描述:

第一行两个整数 n,m。
第二行有 n 个整数,分别为 A[1],A[2],A[3],...。
第三行有 n 个整数,分别为 B[1],B[2],B[3],...。

输出描述:

一个数代表发给每位员工的奖金总和的最大值,结果保留两位小数。
示例1

输入

复制
3 500
20 15 30
6 4 5

输出

复制
51750.00

备注:

输出答案的相对误差不超过  都会被认为是正确的