#include <bits/stdc++.h>
const int INF = 2000000005;
const long long BIG_INF = 2000000000000000005;
const int mod = 1000000007;
const int P = 31;
const long double PI = 3.141592653589793238462643;
const double eps = 1e-9;
using namespace std;
vector<pair<int, int> > dir = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
bool valid(int x, int y, int n, int m) {
  return x >= 0 && y >= 0 && x < n && y < m;
}
mt19937 rng(1999999973);
const int N = 2001;
int n, a, b;
double p[N], u[N];
pair<double, int> dp[N][N];
void update(int i, int j, pair<double, int> s) {
  if (j > a) return;
  if (dp[i][j].first < s.first) dp[i][j] = s;
}
int solve(double lambda) {
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= a; j++) dp[i][j] = make_pair(0.0, 0);
  }
  dp[0][0] = make_pair(0.0, 0);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= a; j++) {
      update(i + 1, j, dp[i][j]);
      update(i + 1, j + 1, make_pair(dp[i][j].first + p[i], dp[i][j].second));
      update(i + 1, j,
             make_pair(dp[i][j].first + u[i] - lambda, dp[i][j].second + 1));
      update(i + 1, j + 1,
             make_pair(dp[i][j].first + u[i] - lambda + p[i] - p[i] * u[i],
                       dp[i][j].second + 1));
    }
  }
  return dp[n][a].second;
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n >> a >> b;
  for (int i = 0; i < n; i++) cin >> p[i];
  for (int i = 0; i < n; i++) cin >> u[i];
  double l = 0.0, r = 1.0;
  for (int i = 0; i < 50; i++) {
    double mid = (l + r) / 2.0;
    int col = solve(mid);
    if (col == b) {
      l = mid;
      break;
    }
    if (col > b)
      l = mid;
    else
      r = mid;
  }
  cout << fixed << setprecision(10) << dp[n][a].first + l * (double)b;
  return 0;
}
