#include using namespace std; #define rep(i, a, b) for (int i = int(a); i < int(b); i++) using ld = long double; int N; ld PA, PB; int A[22], B[22]; int main() { cin >> N >> PA >> PB; assert((1LL << N) * (1LL << N) <= 1e8); 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); vector> dp(1 << N, vector(1 << N)); dp[0][0] = 0; rep(a, 0, 1 << N) rep(b, 0, 1 << N) for (int i = 0, t = -1; i < N; i++) for (int j = 0, s = -1; j < N; j++) { int ac = __builtin_popcount(a); int bc = __builtin_popcount(b); if (a >> i & 1 && b >> j & 1) { if (t == -1) t = i; if (s == -1) s = j; ld pa, pb; if (ac == 1) pa = 1; else { if (t == i) pa = PA; else pa = (1 - PA) / (ac - 1); } if (bc == 1) pb = 1; else { if (s == j) pb = PB; else pb = (1 - PB) / (bc - 1); } dp[a][b] += pa * pb * (dp[a ^ (1 << i)][b ^ (1 << j)] + (A[i] + B[j]) * (A[i] > B[j])); } } cout << fixed << setprecision(16) << dp[(1 << N) - 1][(1 << N) - 1] << endl; }