#include <bits/stdc++.h>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;
 
#define dbl long double
#define int long long
#define ll long long
#define pii pair<int, int>
#define len(x) (int) x.size()
#define oiint ostream_iterator<int>(cout, " ") 
#define pb push_back
#define f first
#define s second
#define endl '\n'
#define all(a) a.begin(), a.end()
#define onlyunique(v) v.erase(unique(all(v)), v.end()); //only for sorted vector
#define inf 2e18

#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize ("O3")
#pragma GCC optimize ("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

#define _CRT_SECURE_NO_WARNINGS
#ifndef ONLINE_JUDGE
#define dbg(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char* name, Arg1&& arg1){cerr << name << " : " << arg1 << endl;}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args){
    const char* comma = strchr(names + 1, ',');
    cerr.write(names, comma - names) << " : " << arg1 << "  ";
    __f(comma + 1, args...);}
#else
#define dbg(...) 42
#endif
template <typename X> ostream& operator << (ostream& x,const vector<X>& v){for(int i=0;i<v.size();++i) x<<v[i]<<" ";return x;} 
template <typename X> ostream& operator << (ostream& x,const set<X>& v){for(auto it:v) x<<it<<" ";return x;} 
template <typename X, typename Y> ostream& operator << (ostream& x, const pair<X,Y>& v) {x<<v.ff<<" "<<v.ss;return x;} 
template <typename T, typename S> ostream& operator << (ostream& os, const map<T, S>& v) { for (auto it : v) os << it.first << "=>" << it.second << endl; return os; }
typedef tree <int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;


const int MOD = 1e9 + 7;
 
int takemod(int a, int mod = MOD){a%=mod;if(a<0)a+=mod;return a;}
 
int fast_exp(int base, int expo, int mod = MOD) {
    int res=1;
    while(expo>0) {
        if(expo&1) res=(res*base)%mod;
        base=(base*base)%mod;
        expo>>=1;}
    return res;
}
 
int modinv(int a, int mod = MOD){return takemod(fast_exp(takemod(a), mod-2, mod), mod);}
 

void solve()
{
    int x,y,a,b,c;
    cin >> x >> y >> a >> b >> c;
    vector<deque<int>> p;
    p.resize(3);
    p[0].resize(a);
    p[1].resize(b);
    p[2].resize(c);

    for(int i = 0 ; i < 3 ; i++){
        for(auto &j: p[i]) cin >> j;
        sort(all(p[i]),greater<int>());
    }
    int ans = 0;
    while(len(p[0]) > x) p[0].pop_back();
    while(len(p[1]) > y) p[1].pop_back();
    reverse(all(p[0]));
    reverse(all(p[1]));

    
    for(int i = 0 ; i < c ; i++){
        if(len(p[0]) && len(p[1])){
            if(p[0].front() < p[1].front()){
                if(p[0].front() < p[2][i]){
                    ans += p[2][i];
                    p[0].pop_front();
                }
                else break;
            }
            else{
                if(p[1].front() < p[2][i]){
                    ans += p[2][i];
                    p[1].pop_front();
                }
                else break;
            }
        }
        else if(len(p[0])){
            if(p[0].front() < p[2][i]){
                ans += p[2][i];
                p[0].pop_front();
            }
            else break;
        }
        else if(len(p[1])){
            if(p[1].front() < p[2][i]){
                ans += p[2][i];
                p[1].pop_front();
            }
            else break;
        }
    }
    for(auto x : p[0]) ans += x;
    for(auto x : p[1]) ans += x;
    
    cout << ans << endl;
}

 
signed main(){
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

    clock_t t1, t2;
    t1 = clock();

    int t = 1;
    // cin >> t;
    while(t--)
    {
        solve();
    }
    #ifndef ONLINE_JUDGE
    t2 = clock(); cerr << "time taken: " << (t2-t1)/(dbl)CLOCKS_PER_SEC;
    #endif
    return 0;
}

Measured memory_bytes: 2688