#include <bits/stdc++.h>
using namespace std;
const int maxn = 2005;
int n, m, i, j, t, k, s, m1, m2, cnt1, cnt2;
double a[2][maxn], gg, rel;
void check(double x, double y) {
  cnt1 = cnt2 = 0;
  rel = 0.0;
  for (int i = 1; i <= n; ++i) {
    double now = 0.0;
    int tmp = 0;
    if (now < a[0][i] + x) now = a[0][i] + x, tmp = 1;
    if (now < a[1][i] + y) now = a[1][i] + y, tmp = 2;
    if (now < 1.0 - (1.0 - a[0][i]) * (1.0 - a[1][i]) + x + y)
      now = 1.0 - (1.0 - a[0][i]) * (1.0 - a[1][i]) + x + y, tmp = 3;
    if (tmp) {
      cnt1 += (tmp & 1);
      cnt2 += ((tmp >> 1) & 1);
      rel += now;
    }
  }
}
bool chk(double x) {
  double L, mid, R;
  L = -1.0, R = 1.0;
  for (int ti = 1; ti <= 60; ++ti) {
    mid = (L + R) / 2;
    check(x, mid);
    if (cnt2 > m2)
      R = mid;
    else
      L = mid;
  }
  check(x, L);
  gg = L;
  return cnt1 <= m1;
}
int main() {
  scanf("%d%d%d", &n, &m1, &m2);
  for (i = 1; i <= n; ++i) scanf("%lf", &a[0][i]);
  for (i = 1; i <= n; ++i) scanf("%lf", &a[1][i]);
  double L, mid, R;
  L = -1.0;
  R = 1.0;
  for (int ti = 1; ti <= 60; ++ti) {
    mid = (L + R) / 2;
    if (chk(mid))
      L = mid;
    else
      R = mid;
  }
  check(L, gg);
  rel -= L * m1 + gg * m2;
  printf("%.6lf\n", rel);
  return 0;
}
