#include <bits/stdc++.h>
using namespace std;
int A, B, s, t;
struct Edge {
  int v, e, nxt;
  double w;
} edge[200005];
int head[5005], cur[5005], tot = 1;
void addedge(int u, int v, int e, double w) {
  edge[++tot].v = v;
  edge[tot].e = e;
  edge[tot].w = w;
  edge[tot].nxt = head[u];
  head[u] = tot;
}
double p[2005], u[2005], dis[5005], eps = 1e-9;
int vis[5005];
int SPFA() {
  for (int i = 0; i <= t; i++) cur[i] = head[i], dis[i] = -1e9, vis[i] = 0;
  queue<int> Q;
  Q.push(s);
  dis[s] = 0;
  vis[s] = 1;
  while (Q.size()) {
    int u = Q.front();
    Q.pop();
    vis[u] = 0;
    for (int i = head[u]; i; i = edge[i].nxt) {
      int v = edge[i].v;
      if (dis[v] + eps < dis[u] + edge[i].w && edge[i].e) {
        dis[v] = dis[u] + edge[i].w;
        if (vis[v] == 0) {
          vis[v] = 1;
          Q.push(v);
        }
      }
    }
  }
  return dis[t] != dis[0];
}
double ans = 0.0;
int dfs(int u, int e) {
  if (u == t) return e;
  vis[u] = 1;
  int used = 0, now = 0;
  for (int i = cur[u]; i; i = edge[i].nxt) {
    cur[u] = i;
    int v = edge[i].v;
    if (fabs(dis[v] - (dis[u] + edge[i].w)) < eps && edge[i].e && vis[v] == 0) {
      if (now = dfs(v, min(edge[i].e, e - used))) {
        used += now;
        edge[i].e -= now;
        edge[i ^ 1].e += now;
        ans += 1.0 * now * edge[i].w;
        if (used == e) break;
      }
    }
  }
  return used;
}
double Dinic() {
  while (SPFA()) {
    for (int i = 0; i <= t; i++) vis[i] = 0;
    dfs(s, 1e9);
  }
  return ans;
}
int main() {
  int n, a, b;
  scanf("%d %d %d", &n, &a, &b);
  for (int i = 1; i <= n; i++) scanf("%lf", &p[i]);
  for (int i = 1; i <= n; i++) scanf("%lf", &u[i]);
  A = n + 1, B = n + 2, s = n + 3, t = n + 4;
  addedge(s, A, a, 0);
  addedge(A, s, 0, 0);
  addedge(s, B, b, 0);
  addedge(B, s, 0, 0);
  for (int i = 1; i <= n; i++) {
    addedge(A, i, 1, p[i]);
    addedge(i, A, 0, -p[i]);
    addedge(B, i, 1, u[i]);
    addedge(i, B, 0, -u[i]);
    addedge(i, t, 1, 0);
    addedge(t, i, 0, 0);
    addedge(i, t, 1, -p[i] * u[i]);
    addedge(t, i, 0, p[i] * u[i]);
  }
  printf("%.7lf", Dinic());
  return 0;
}
