#include using namespace std; #define rep(i, a, b) for (int i = int(a); i < int(b); i++) using ld = double; int main() { int N; ld PA, PB; int A[22], B[22]; cin >> N >> PA >> PB; for (int i = 0; i < N; i++) cin >> A[i]; for (int i = 0; i < N; i++) cin >> B[i]; sort(A, A + N), sort(B, B + N); auto pos = [&](int b, int i, ld P) -> ld { assert(b >> i & 1); int bc = __builtin_popcount(b); if (bc == 1) return 1.; else { int bit = 1 << i; int s = b & (-b); if (bit == s) return P; else return (1 - P) / (bc - 1); } }; auto calc = [&](ld P) { vector dp(N + 1, vector(1 << N)); dp[0][(1 << N) - 1] = 1; for (int r = 0; r < N; r++) { for (int b = 0; b < (1 << N); b++) { for (int i = 0; i < N; i++) { if (b >> i & 1) { int nb = b ^ (1 << i); dp[r + 1][nb] += dp[r][b] * pos(b, i, P); } } } } return dp; }; auto dpa = calc(PA); auto dpb = calc(PB); auto f = [&](int i, int r, const vector>& dp, ld P) { ld t = 0; for (int b = 0; b < (1 << N); b++) { if (b >> i & 1) t += dp[r][b] * pos(b, i, P); } return t; }; ld ans = 0; for (int r = 1; r <= N; r++) { vector p(N), q(N); for (int i = 0; i < N; i++) p[i] = f(i, r - 1, dpa, PA); for (int j = 0; j < N; j++) q[j] = f(j, r - 1, dpb, PB); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { ans += p[i] * q[j] * ((A[i] + B[j]) * (A[i] > B[j])); } } } cout << fixed << setprecision(17) << ans << endl; }