#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <numeric>
#include <functional>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <sstream>
#include <string>
#define repd(i,a,b) for (int i=(int)(a);i<(int)(b);i++)
#define rep(i,n) repd(i,0,n)
#define all(x) (x).begin(),(x).end()
#define mod 1000000007
#define inf 2000000007
#define mp make_pair
#define pb push_back
typedef long long ll;
using namespace std;
template <typename T>
inline void output(T a, int p = 0) {
    if(p) cout << fixed << setprecision(p)  << a << "\n";
    else cout << a << "\n";
}
// end of template
const int M = 100;
double dp[M + 1][M + 1][M + 1][3][3];

// turn?????????????????£?????????????????????
bool isEmpty(int i, int j, int k, int t, int b){
    switch(t){
        case 0:
            return i <= 0 && j <= 0 && b != 0;
        case 1:
            return j <= 0 && k <= 0 && b != 1;
        case 2:
            return i <= 0 && k <= 0 && b != 2;
    }
    return false;
}
// ??????: i + j
// ?????°: j + k
// ??????: k + i
// i: K,M  j: S,K  k: M,S t: turn b: joker
double dfs(int i, int j, int k, int t, int b){
//    cout << i << "," << j << "," << k << "," << t << "," << b << endl;
    double &ret = dp[i][j][k][t][b];
    if(i < 0 || j < 0 || k < 0) {
//        output("e");
        return 0.0;
    }
    if(ret >= 0) return ret;
    if(isEmpty(i, j, k, 0, b) && isEmpty(i, j, k, 2, b)){
//        output("0000");
        return ret = 0.0; // ?????°????????\??? ?????????
    }
    if(isEmpty(i, j, k, 1, b)){ // ?????°?????? ?????????
//        output("1111");
        return ret = 1.0;
    }
    if(isEmpty(i, j, k, t, b)){
        return ret = dfs(i, j, k, (t + 1) % 3, b); // ????????\???????¬???????????????????
    }
    int n = (t + 1) % 3; // ?¬???????????????????
    switch(t){
        case 0: // ???????????????????????????????????????????????????????????????
            if(!isEmpty(i, j, k, 2, b)){ // ?????????????????????
//                output("A");
                int joker = (b == 2) ? 1 : 0; // ?????????????????§?????????????????????????????????
                ret = dfs(i - 1, j, k, n, b) * i + dfs(i, j + 1, k - 1, n, b) * k + dfs(i, j, k, n, 0) * joker;
                ret /= (i + k + joker);
                return ret;
            }
            else{ // ????????????????????£?????????????????°??????????????????(??????????????????)
//                output("B");
                if(j > 0){
                    return ret = dfs(i, j - 1, k, n, b);
                }
                else if(k > 0){
                    return ret = dfs(i + 1, j, k - 1, n, b);
                }
                else{
                    return ret = dfs(i, j, k, n, 0);
                }
                
            }
        case 1: // ????????°?????????????????????????????????????????????????????????
            if(!isEmpty(i, j, k, 0, b)){ // ????????????????????????
//                output("C");
                int joker = (b == 0) ? 1 : 0;
                ret = dfs(i - 1, j, k + 1, n, b) * i + dfs(i, j - 1, k, n, b) * j + dfs(i, j, k, n, 1) * joker;
                ret /= (i + j + joker);
                return ret;
            }
            else{ // ???????????????????????£?????????????????????????????????
//                output("D");
                int joker = (b == 2) ? 1 : 0;
                ret = dfs(i, j, k - 1, n, b) * k + dfs(i, j, k, n, 1) * joker;
                ret /= (k + joker);
                return ret;
            }
        case 2: // ????????????????????°??????????????????????????????????????????
            if(!isEmpty(i, j, k, 1, b)){ // ?????°??????????????????(??????????????????)
//                output("E");
                if(k > 0){ // ??±???????????????????????´?????????????????????
                    return ret = dfs(i, j, k - 1, n, b);
                }
                else if(j > 0){ // ??±???????????????????????´??????joker??\????????????
                    return ret = dfs(i + 1, j - 1, k, n, b);
                }
                else{ // joker??????????????´??????joker?????????
                    return ret = dfs(i, j, k, n, 2);
                }
            }
            else{ // ?????°?????????????????£????????????????????????????????????
//                output("F");
                int joker = (b == 0) ? 1 : 0;
                ret = dfs(i - 1, j, k, n, b) * i + dfs(i, j, k, n, 2) * joker;
                ret /= (i + joker);
                return ret;
            }
    }
//    output("return");
    return 0.0;
}

int main() {
    cin.tie(0);
    ios::sync_with_stdio(0);
    // source code
    int N;
    cin >> N;
    vector<vector<int>> A(3, vector<int>(N + 1, 0));
    rep(i, 3){
        int m;
        cin >> m;
        rep(j, m){
            int a;
            cin >> a;
            A[i][a] ^= 1;
        }
    }
    int joker = 0;
    rep(i, 3) if(A[i][0] == 1) joker = i;
    // K, S, M ... K,M  S,K  M,S
    vector<int> B(3, 0);
    rep(i, N + 1){
        if(A[0][i] && A[2][i]) B[0]++;
        if(A[1][i] && A[0][i]) B[1]++;
        if(A[1][i] && A[2][i]) B[2]++;
    }
    rep(i, N + 1) rep(j, N + 1) rep(k, N + 1) rep(l, 3) rep(m, 3) dp[i][j][k][l][m] = -1;
    
    output(dfs(B[0], B[1], B[2], 0, joker), 10);
    
    return 0;
}

Measured memory_bytes: 75768