#include <numeric>
#include <chrono>
#include <random>
#include <array>
#include <iomanip>
#include <stack>
#include <queue>
#include <random>
#include <unordered_set>
#include <unordered_map>
#include <iostream>
#include <sstream>
#include <vector>
#include <cstdio>
#include <map>
#include <set>
#include <functional>
#include <queue>
#include <string>
#include <bitset>
#include <cassert>
#include <cmath>
#include <algorithm>
#include <tuple>
#include <sstream>
using namespace std;

#define forn(a, e) for (int a = 0; a < (int)(e); a++)
#define forr(a, s, e) for (int a = s; a < (int)(e); a++)
#define fore(e, a) for (auto& e : a)

#ifdef LOCAL
#define logv(a) {cerr << #a << " = "; fore(e, a) {cerr << e << " ";} cerr << "\n";}
#define logvp(a) {cerr << #a << " = "; fore(e, a) {cerr << "(" << e.first << ", " << e.second << ") ";} cerr << "\n";}
#define logvv(a) {cerr << #a << " = \n"; fore(r, a) { fore(e, r) {cerr << e << " ";} cerr << "\n";} }
#define logvf(a, field) {cerr << #a"."#field << " = \n"; fore(e, a) { cerr << e.field << " ";} cerr << "\n"; }
#define logvff(a, f1, f2) {cerr << #a".{"#f1 << ", "#f2 << "} = \n"; fore(e, a) { cerr << "(" << e.f1 <<", " << e.f2 << ") ";} cerr << "\n"; }
#define logs(a) cerr << #a << " = " << (a) << "\n";
#define logss(a, b) cerr << #a << " = " << (a) << ", " << #b << " = " << (b) << "\n";
#define logp(a) cerr << #a << " = " << "(" << a.first << ", " << a.second << ")" << "\n";
#define cond(pred, stmt) if (pred) { stmt }
#else
#define logv(a)
#define logvp(a)
#define logvv(a)
#define logvf(a, field)
#define logvff(a, f1, f2)
#define logs(a)
#define logss(a, b)
#define logp(a)
#define cond(pred, stmt)
#endif

using i64 = long long;
using iip = pair<i64, i64>;
using ivec = vector<int>;
using llvec = vector<i64>;
using svec = vector<string>;
template<typename T> using vec = vector<T>;

template<typename T, typename Dim>
auto make_vec(T value, Dim dim) { return vector<T>(dim, value); }
template<typename T, typename Dim1, typename... Dim>
auto make_vec(T value, Dim1 dim1, Dim... dims) { return make_vec(make_vec(value, dims...), dim1); }

template<typename T>
bool uax(T& v, const T& newv) { if (v < newv) { v = newv; return true; } else return false; }
template<typename T>
bool uin(T& v, const T& newv) { if (v > newv) { v = newv; return true; } else return false; }

template<typename U, typename V>
istream& operator>>(istream& is, pair<U, V>& p) { is >> p.first >> p.second; return is; }
template<typename T>
istream& operator>>(istream& is, vector<T>& c) { for (auto& e : c) is >> e; return is; }

// template<typename ...T>
// istream& read(T&... args) { return (cin >> ... >> args); }

static mt19937 rande(123123);
template<typename T>
T rand_int(T from, T to) { uniform_int_distribution<T> distr(from, to); return distr(rande); }


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    i64 x, y, a, b, c;
    while (cin >> x >> y >> a >> b >> c) {
        llvec p(a);
        llvec q(b);
        llvec r(c);
        cin >> p >> q >> r;

        vec<iip> all;
        fore(pi, p) {
            all.emplace_back(pi, 0);
        }
        fore(qi, q) {
            all.emplace_back(qi, 1);
        }
        fore(ri, r) {
            all.emplace_back(ri, 2);
        }
        sort(all.rbegin(), all.rend());

        priority_queue<int> pq[3];
        forr(i, x + y, a + b + c) {
            pq[all[i].second].push(all[i].first);
        }

        int cc[3] = {0, 0, 0};
        i64 ans = 0;
        forn(i, x + y) {
            cc[all[i].second]++;
            if (cc[0] > x) {
                cc[0]--;
                int id = 0;
                if (!pq[2].empty()) {
                    id = 2;
                }
                if (!pq[1].empty() && cc[1] != y && (id == 0 || pq[1].top() > pq[id].top())) {
                    id = 1;
                }
                all[i] = {pq[id].top(), id};
                pq[id].pop();
                cc[id]++;
            }
            if (cc[1] > y) {
                cc[1]--;
                int id = 1;
                if (!pq[2].empty()) {
                    id = 2;
                }
                if (!pq[0].empty() && cc[0] != x && (id == 1 || pq[0].top() > pq[id].top())) {
                    id = 0;
                }
                all[i] = {pq[id].top(), id};
                pq[id].pop();
                cc[id]++;
            }
            ans += all[i].first;
        }
        cout << ans << endl;
    }
}


Measured memory_bytes: 12908