## 実装

#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; (i) < (int)(n); ++ (i))
#define REP_R(i, n) for (int i = int(n) - 1; (i) >= 0; -- (i))
#define ALL(x) begin(x), end(x)
using ll = long long;
using namespace std;
template <typename X, typename T> auto vectors(X x, T a) { return vector<T>(x, a); }
template <typename X, typename Y, typename Z, typename... Zs> auto vectors(X x, Y y, Z z, Zs... zs) { auto cont = vectors(y, z, zs...); return vector<decltype(cont)>(x, cont); }

double solve(vector<int> a, vector<int> b, int c) {
// by linearity
double avg_a = accumulate(ALL(a), 0.0) / a.size();

// take products to use linearity
vector<double> avg_b(b.size() + 1); {
vector<double> num(b.size() + 1);
vector<ll> den(b.size() + 1);
num[0] = 1;
den[0] = 1;
REP (j, b.size()) {
REP_R (len, j + 1) {
num[len + 1] += num[len] * b[j];
den[len + 1] += den[len];
}
}
REP (j, b.size() + 1) {
avg_b[j] = num[j] / den[j];
}
}

// dp
auto memo = vectors(a.size() + 1, b.size() + 1, (double)NAN);
function<double (int, int)> go = [&](int i, int j) {
if (not std::isnan(memo[i][j])) return memo[i][j];
double p = (double)(a.size() - i) / (a.size() - i + b.size() - j + c);
double q = (double)(b.size() - j) / (a.size() - i + b.size() - j + c);
double r = (double) c             / (a.size() - i + b.size() - j + c);
double e = 0;
if (p) e += p * (go(i + 1, j) + avg_a * avg_b[j]);
if (q) e += q * go(i, j + 1);
return memo[i][j] = e;
};
return go(0, 0);
}

int main() {
int A, B, C; scanf("%d%d%d", &A, &B, &C);
vector<int> a(A), b(B);
REP (i, A) scanf("%d", &a[i]);
REP (j, B) scanf("%d", &b[j]);
double e = solve(a, b, C);
printf("%.12lf\n", e);
return 0;
}