def get(a,n,p): res = [[0.0]*n for _ in range(n)] N = 1<<n dp = [0.0]*N dp[0] = 1.0 for mask in range(N-1): find = 0 s = size[mask] if s==n-1: i = ((N-1)^mask).bit_length()-1 res[s][i] += dp[mask] continue np = (1-p)/(n-s-1) for i in range(n): if mask>>i&1 == 0: if not find: find = 1 dp[mask|(1<<i)] += dp[mask]*p res[s][i] += dp[mask]*p else: dp[mask|(1<<i)] += dp[mask]*np res[s][i] += dp[mask]*np return res n,pa,pb = input().split() n = int(n) pa,pb = float(pa), float(pb) *a, = map(int,input().split()) *b, = map(int,input().split()) a.sort() b.sort() size = [0]*(1<<n) for i in range(n): for j in range(1<<i): size[j+(1<<i)] = size[j] + 1 ra = get(a,n,pa) rb = get(b,n,pb) ans = 0 for s in range(n): for i,ai in enumerate(a): for j,bj in enumerate(b): if ai > bj: ans += ra[s][i]*rb[s][j]*(ai+bj) print(ans)