#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
long long powmod(long long a, long long b, long long P) {
  long long res = 1;
  a %= P;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % P;
    a = a * a % P;
  }
  return res;
};
long long gcd(long long x, long long y) {
  while (y) {
    long long t = x % y;
    x = y;
    y = t;
  }
  return x;
}
long long ex_gcd(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1, y = 0;
    return a;
  } else {
    long long r = ex_gcd(b, a % b, y, x);
    y -= x * (a / b);
    return r;
  }
}
template <typename T>
inline bool chkmin(T &a, const T &b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T>
inline bool chkmax(T &a, const T &b) {
  return a < b ? a = b, 1 : 0;
}
struct MCMF {
  int fst[3000], nxt[5000100], vv[5000100], from[5000100], e, cap[5000100],
      flow[5000100];
  double cost[5000100], d[3000];
  int a[3000], p[3000], in[3000];
  void init() {
    e = 0;
    memset(fst, -1, sizeof fst);
  }
  void add(int u, int v, int c, double d) {
    vv[e] = v, nxt[e] = fst[u], from[e] = u, cost[e] = d, cap[e] = c,
    flow[e] = 0, fst[u] = e++;
    vv[e] = u, nxt[e] = fst[v], from[e] = v, cost[e] = -d, cap[e] = 0,
    flow[e] = 0, fst[v] = e++;
  }
  bool spfa(int s, int t, int &mf, double &mc) {
    fill(d, d + 3000, 1e10);
    d[s] = p[s] = 0;
    a[s] = 0x3f3f3f3f;
    queue<int> q;
    q.push(s);
    while (!q.empty()) {
      int u = q.front();
      q.pop();
      in[u] = 0;
      for (int i = fst[u]; ~i; i = nxt[i]) {
        int v = vv[i];
        double c = cost[i];
        if (cap[i] <= flow[i] || d[v] < d[u] + c + 1e-8) continue;
        d[v] = d[u] + c;
        a[v] = min(a[u], cap[i] - flow[i]);
        p[v] = i;
        if (!in[v]) in[v] = 1, q.push(v);
      }
    }
    if (d[t] > -1e-8) return 0;
    mf += a[t], mc += d[t] * a[t];
    int u = t;
    while (u != s) {
      flow[p[u]] += a[t];
      flow[p[u] ^ 1] -= a[t];
      u = from[p[u]];
    }
    return 1;
  }
  double gao(int s, int t) {
    double mc = 0.0;
    int mf = 0;
    while (spfa(s, t, mf, mc)) {
    }
    return mc;
  }
} go;
double x[3000], y[3000];
int main() {
  int n, a, b;
  scanf("%d %d %d", &n, &a, &b);
  int s = 0, t = n + 3, p1 = 1, p2 = 2;
  go.init();
  go.add(s, p1, a, 0), go.add(s, p2, b, 0);
  for (int i = 0; i < n; i++) {
    scanf("%lf", &x[i]);
    go.add(p1, i + 3, 1, -x[i]);
  }
  for (int i = 0; i < n; i++) {
    scanf("%lf", &y[i]);
    go.add(p2, i + 3, 1, -y[i]);
    go.add(i + 3, t, 1, 0);
    go.add(i + 3, t, 1, x[i] * y[i]);
  }
  printf("%.10lf\n", -go.gao(s, t));
  return 0;
}
