#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const int P = 1e9 + 7;
int n, a, b;
double p[N], u[N], ans;
pair<double, int> f[2005][2005];
void chkmin(pair<double, int> &a, const pair<double, int> &b) {
  if (b.first < a.first) a = b;
}
pair<double, int> check(double cost) {
  for (int i = (int)1; i <= (int)n; i++)
    for (int j = (int)0; j <= (int)i; j++) f[i][j] = pair<double, int>(1e30, 0);
  f[0][0] = pair<double, int>(0, 0);
  for (int i = (int)1; i <= (int)n; i++)
    for (int j = 0; j < i && j <= b; j++) {
      double val = f[i - 1][j].first;
      int use = f[i - 1][j].second;
      chkmin(f[i][j], pair<double, int>(val + 1, use));
      chkmin(f[i][j], pair<double, int>(val + p[i] - cost, use + 1));
      chkmin(f[i][j + 1], pair<double, int>(val + u[i], use));
      chkmin(f[i][j + 1], pair<double, int>(val + p[i] * u[i] - cost, use + 1));
    }
  pair<double, int> ans;
  ans.first = 1e30;
  for (int i = (int)0; i <= (int)b; i++) chkmin(ans, f[n][i]);
  return ans;
}
int main() {
  scanf("%d%d%d", &n, &a, &b);
  for (int i = (int)1; i <= (int)n; i++) {
    scanf("%lf", p + i);
    p[i] = 1 - p[i];
  }
  for (int i = (int)1; i <= (int)n; i++) {
    scanf("%lf", u + i);
    u[i] = 1 - u[i];
  }
  double l = -1, r = 1;
  for (int i = (int)1; i <= (int)30; i++) {
    double md = (l + r) * 0.5;
    int ret = check(md).second;
    if (ret <= a) {
      l = md;
    } else
      r = md;
  }
  printf("%.10lf\n", n - (l * a + check(l).first));
  return 0;
}
