#include <bits/stdc++.h>
using namespace std;
double const eps = 1e-7;
struct Edge {
  int dest, flow, ctpt;
  double cost;
  Edge(int _dest, int _flow, double _cost, int _ctpt)
      : dest(_dest), flow(_flow), cost(_cost), ctpt(_ctpt) {}
};
vector<Edge> edges[2004];
int source = 2002, sink = 2003, from[2004];
double dist[2004], p[2000], u[2000];
bool inq[2004];
vector<Edge>::iterator edge_from[2004];
inline void insert(int from, int to, int flow, double cost) {
  edges[from].push_back(Edge(to, flow, cost, edges[to].size()));
  edges[to].push_back(Edge(from, 0, -cost, edges[from].size() - 1));
}
inline bool can_augment() {
  static queue<int> q;
  vector<Edge>::iterator it;
  int x;
  memset(dist, 0xf0, sizeof dist);
  dist[source] = 0.0;
  inq[source] = true;
  q.push(source);
  while (!q.empty()) {
    inq[x = q.front()] = false;
    q.pop();
    for (it = edges[x].begin(); it != edges[x].end(); ++it)
      if (it->flow && dist[it->dest] < dist[x] + it->cost - eps) {
        dist[it->dest] = dist[x] + it->cost;
        from[it->dest] = x;
        edge_from[it->dest] = it;
        if (!inq[it->dest]) {
          inq[it->dest] = true;
          q.push(it->dest);
        }
      }
  }
  return dist[sink] > -1e60;
}
double augment() {
  int i, flow = 0x3f3f3f3f;
  double cost = 0.0;
  for (i = sink; i != source; i = from[i]) flow = min(flow, edge_from[i]->flow);
  for (i = sink; i != source; i = from[i]) {
    cost += edge_from[i]->cost;
    edge_from[i]->flow -= flow;
    edges[i][edge_from[i]->ctpt].flow += flow;
  }
  return flow * cost;
}
int main() {
  int n, a, b, i, A = 2000, B = 2001;
  double ans = 0.0;
  ios_base::sync_with_stdio(false);
  cin >> n >> a >> b;
  for (i = 0; i < n; ++i) cin >> p[i];
  for (i = 0; i < n; ++i) cin >> u[i];
  for (i = 0; i < n; ++i) {
    insert(A, i, 1, p[i]);
    insert(B, i, 1, u[i]);
    insert(i, sink, 1, 0.0);
    insert(i, sink, 1, -p[i] * u[i]);
  }
  insert(source, A, a, 0.0);
  insert(source, B, b, 0.0);
  while (can_augment()) ans += augment();
  cout << fixed << ans << '\n';
  return 0;
}
