#include <bits/stdc++.h>
using namespace std;
inline int read(int r = 0, int s = 0, int c = getchar()) {
  for (; c < 48 || c > 57; s = c, c = getchar())
    ;
  for (; c >= 48 && c <= 57; (r *= 10) += c - 48, c = getchar())
    ;
  return s ^ '-' ? r : -r;
}
double p[2000 + 5], u[2000 + 5], cp, cu, Ans, r, l1, r1, l2, r2, m1, m2;
int n, a, b, d;
inline bool Cmax(double &x, double v) { return x < v ? x = v, true : false; }
void DP(double P, double U) {
  Ans = cu = cp = 0;
  for (register int i = 1; i <= n; r = d = 0, Cmax(r, u[i] - U) ? d = 1 : 0,
                    Cmax(r, p[i] - P) ? d = 2 : 0,
                    Cmax(r, 1 - (1 - u[i]) * (1 - p[i]) - U - P) ? d = 3 : 0,
                    cu += !!(d & 1), cp += !!(d & 2), Ans += r, i++)
    ;
}
int main() {
  n = read(), a = read(), b = read();
  for (register int i = 1; i <= n; scanf("%lf", p + i++))
    ;
  for (register int i = 1; i <= n; scanf("%lf", u + i++))
    ;
  for (l1 = 0, r1 = 1, l2 = 0, r2 = 1; r1 - l1 >= 1e-8;
       DP(m1, r2), (cp <= a ? r1 : l1) = m1)
    for (m1 = (l1 + r1) / 2, l2 = 0, r2 = 1; r2 - l2 >= 1e-8;
         m2 = (l2 + r2) / 2, DP(m1, m2), (cu <= b ? r2 : l2) = m2)
      ;
  DP(r1, r2);
  printf("%.6f\n", Ans + r1 * a + r2 * b);
  return 0;
}
