#include <bits/stdc++.h>
const int oo = 2139063143;
const int N = 1010000;
const int P = 1000000007;
using namespace std;
inline void sc(int &x) {
  x = 0;
  static int p;
  p = 1;
  static char c;
  c = getchar();
  while (!isdigit(c)) {
    if (c == '-') p = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c - 48);
    c = getchar();
  }
  x *= p;
}
inline void print(int x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) print(x / 10);
  putchar(x % 10 + '0');
}
inline void pr(int x) { print(x), putchar('\n'); }
const double eps = 1e-7;
int n, na, nb;
double a[N], b[N], c[N];
struct LY {
  double v;
  int a, b;
  LY(double vv = 0, int aa = 0, int bb = 0) { v = vv, a = aa, b = bb; }
} f[N];
bool operator<(LY a, LY b) { return a.v < b.v; }
LY operator+(LY a, LY b) { return LY(a.v + b.v, a.a + b.a, a.b + b.b); }
LY calc(double ca, double cb) {
  f[0] = LY(0, 0, 0);
  for (int i = 1; i <= n; i++)
    f[i] = max(f[i - 1], max(f[i - 1] + LY(a[i] - ca, 1, 0),
                             max(f[i - 1] + LY(b[i] - cb, 0, 1),
                                 f[i - 1] + LY(c[i] - ca - cb, 1, 1))));
  return f[n];
}
double cb;
LY check(double ca) {
  double l = 0, r = 1;
  while (l + eps < r) {
    double mid = (l + r) / 2;
    LY u = calc(ca, mid);
    if (u.b >= nb)
      l = mid;
    else
      r = mid;
  }
  cb = l;
  return calc(ca, l);
}
int main() {
  sc(n), sc(na), sc(nb);
  for (int i = 1; i <= n; i++) scanf("%lf", &a[i]);
  for (int i = 1; i <= n; i++) scanf("%lf", &b[i]);
  for (int i = 1; i <= n; i++) c[i] = a[i] + b[i] - a[i] * b[i];
  double l = 0, r = 1;
  while (l + eps < r) {
    double mid = (l + r) / 2;
    LY ua = check(mid);
    if (ua.a >= na)
      l = mid;
    else
      r = mid;
  }
  double ca = l, v = calc(ca, cb).v;
  printf("%.6lf\n", v + ca * na + cb * nb);
  return 0;
}
