#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 5;
const int MOD = 1e9 + 7;
int power(int a, int b, int m = MOD) {
  if (b == 0) return 1;
  if (b == 1) return a;
  int x = power(a, b / 2, m) % m;
  x = (x * x) % m;
  if (b % 2) return (x * a) % m;
  return x;
}
long long n, a, b;
long double arr[N][2], dp[N], arr2[N][4];
long long opt[N];
pair<long long, long long> solve(long double &mid1, long double &mid2) {
  pair<long long, long long> ret = {0, 0};
  for (long long i = 1; i <= n; i++) dp[i] = 0;
  for (long long i = 1; i <= n; i++) {
    dp[i] = dp[i - 1];
    long long opt = 0;
    if (dp[i - 1] + arr2[i][1] - mid1 > dp[i]) {
      dp[i] = dp[i - 1] + arr2[i][1] - mid1;
      opt = 1;
    }
    if (dp[i - 1] + arr2[i][2] - mid2 > dp[i]) {
      dp[i] = dp[i - 1] + arr2[i][2] - mid2;
      opt = 2;
    }
    if (dp[i - 1] + arr2[i][3] - mid1 - mid2 > dp[i]) {
      dp[i] = dp[i - 1] + arr2[i][3] - mid1 - mid2;
      opt = 3;
    }
    if (opt == 1 || opt == 3) ret.first++;
    if (opt == 2 || opt == 3) ret.second++;
  }
  return ret;
}
int main() {
  scanf("%lld%lld%lld", &n, &a, &b);
  for (long long i = 1; i <= n; i++) scanf("%Lf", &arr[i][0]);
  for (long long i = 1; i <= n; i++) scanf("%Lf", &arr[i][1]);
  for (long long i = 1; i <= n; i++) {
    arr2[i][1] = arr[i][0];
    arr2[i][2] = arr[i][1];
    arr2[i][3] = arr[i][0] + arr[i][1] - arr[i][0] * arr[i][1];
    arr2[i][0] = 0;
  }
  long double hi1 = 1, hi2 = 1, lo1 = 0, lo2 = 0;
  for (long long i = 1; i <= 50; i++) {
    long double mid1 = (hi1 + lo1) / 2;
    hi2 = 1, lo2 = 0;
    for (long long j = 1; j <= 50; j++) {
      long double mid2 = (hi2 + lo2) / 2;
      pair<long long, long long> x = solve(mid1, mid2);
      if (x.second > b)
        lo2 = mid2;
      else
        hi2 = mid2;
    }
    pair<long long, long long> x = solve(mid1, hi2);
    if (x.first > a)
      lo1 = mid1;
    else
      hi1 = mid1;
  }
  solve(hi1, hi2);
  printf("%0.15Lf\n", dp[n] + (long double)hi1 * (long double)a +
                          (long double)hi2 * (long double)b);
  return 0;
}
