#include <bits/stdc++.h>
using namespace std;
const double PI = 3.14159265358979323846;
const double eps = (1e-10);
int isGreater(long double x, long double y) {
  if (abs(x - y) < eps) return 0;
  if (x > y) return 1;
  return -1;
}
enum { a, b };
int n, cnt[2];
const int MAX_N = 2001;
long double p[2][MAX_N];
pair<long double, int> mem[2][MAX_N];
pair<long double, int> add(pair<long double, int> f, long double x, int y) {
  f.first += x;
  f.second += y;
  return f;
}
pair<long double, int> merge(pair<long double, int> f,
                             pair<long double, int> s) {
  if (f.first > s.first || (f.first == s.first && f.second < s.second))
    return f;
  return s;
}
pair<long double, int> solveTable(long double lamda) {
  memset(mem, 0, sizeof(mem));
  for (int i = n - 1; i >= 0; --i) {
    for (int ca = 0; ca <= cnt[a]; ++ca) {
      int cur = i & 1, nxt = !cur;
      mem[cur][ca] = mem[nxt][ca];
      mem[cur][ca] = merge(mem[cur][ca], add(mem[nxt][ca], p[b][i] + lamda, 1));
      if (ca) {
        mem[cur][ca] = merge(mem[cur][ca], add(mem[nxt][ca - 1], p[a][i], 0));
        mem[cur][ca] =
            merge(mem[cur][ca],
                  add(mem[nxt][ca - 1],
                      (p[a][i] + p[b][i] - p[a][i] * p[b][i]) + lamda, 1));
      }
    }
  }
  return mem[0][cnt[a]];
}
bool valid(long double lamda) { return solveTable(lamda).second <= cnt[b]; }
long double getAns() {
  long double st = -1, en = 0;
  while (isGreater(en, st) == 1) {
    long double mid = st + (en - st) / 2;
    if (valid(mid))
      st = mid;
    else
      en = mid;
  }
  auto temp = solveTable(st);
  long double ans = temp.first;
  int m = temp.second;
  cerr << "st"
       << " : " << (st) << endl;
  cerr << "m"
       << " : " << (m) << endl;
  cerr << "ans"
       << " : " << (ans) << endl;
  return max(ans - m * st, ans - cnt[b] * st);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < 2; ++i) cin >> cnt[i];
  for (int i = 0; i < 2; ++i) {
    for (int j = 0; j < n; ++j) cin >> p[i][j];
  }
  cout << fixed << setprecision(10) << getAns() << '\n';
  return 0;
}
