#include #include #include #include using namespace std; typedef long long LL; typedef long double LDB; const int kMaxN = 1e4 + 10; const LDB kEps = 1e-4; int n, a, b; LDB p[kMaxN], q[kMaxN]; LDB calcxy(LDB x, LDB y) { LDB tot = a * x + b * y; for (int i = 1; i <= n; i++) tot += max({LDB(0), p[i] - x, q[i] - y, p[i] + q[i] - p[i] * q[i] - x - y}); return tot; } LDB calcx(LDB x) { LDB res=0; LDB left_bound = -1e4, right_bound = 1e4; while (right_bound - left_bound > kEps) { LDB l_mid = (left_bound + left_bound + right_bound) / 3; LDB r_mid = (left_bound + right_bound + right_bound) / 3; LDB l_res = calcxy(x, l_mid); LDB r_res = calcxy(x, r_mid); res = (l_res + r_res) / 2; if (l_res > r_res) left_bound = l_mid; else right_bound = r_mid; } return res; } LDB calc() { LDB res = 0; LDB left_bound = -1e4, right_bound = 1e4; while (right_bound - left_bound > kEps) { LDB l_mid = (left_bound + left_bound + right_bound) / 3; LDB r_mid = (left_bound + right_bound + right_bound) / 3; LDB l_res = calcx(l_mid); LDB r_res = calcx(r_mid); res = (l_res + r_res) / 2; if (l_res > r_res) left_bound = l_mid; else right_bound = r_mid; } return res; } int main() { #ifdef local freopen("pro.in", "r", stdin); #endif scanf("%d%d%d", &n, &a, &b); for (int i = 1; i <= n; i++) scanf("%Lf", &p[i]); for (int i = 1; i <= n; i++) scanf("%Lf", &q[i]); printf("%.2Lf\n", calc()); return 0; }