#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<stack>
#include<unordered_set>
#include<cmath>
#include<tuple>
#include<numeric>
#include<iterator>
#include<set>
#include<unordered_map>
#include<map>


#define fastio                      ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define lp(i , aa , bb)               for(auto i = aa ; i < bb ; i++)
#define dbg(a)                      cout << "here is " << a << "\n";
#define ain(a , n)                  for(auto i = 0 ; i < n ; i++) cin >> a[i]
#define aout(a , n)                 for(auto i = 0 ; i < n ; i++) cout << a[i] << " "
#define dist(a , b , x , y)         abs(x - a)*abs(x - a) + abs(y - b)*abs(y - b)
#define M                           998244353
#define mp                          make_pair
#define mt                          make_tuple

using namespace std;
typedef unsigned long long ll;
typedef unsigned long long ull;
typedef vector <int> vi;
typedef vector <ll> vll;
typedef vector <char> vch;
typedef vector <string> vs;

/*----------------------------- # --- MATH ALGORITHMS --- # -----------------------------*/

template <class T> T gcd(T a , T b){ while(a != 0){T temp = a; a = b % a; b = temp;}return b;}
template <class T> T egcd(T a , T b , T &x , T &y){T gcd , xt , yt;if(a == 0){gcd = b;x = 0 , y = 1;}else {gcd = egcd(b % a , a , xt , yt);x = yt - (b/a)*xt; y = xt;}return gcd;}
template <class T> T expo(T base , T exp , T mod){T res = 1;base = base % mod;while (exp > 0){if (exp & 1)res = (res*base) % mod;exp = exp>>1;base = (base*base) % mod;}return res;}
template <class T> T modinv(T a , T mod){T x , y; egcd<T>(a , mod , x , y);while(x < 0) x += mod; while(x >= mod) x -= mod; return x;}
template <class T> T modinvfermat(T a , T mod){return expo<T>(a , mod - 2 , mod);}
template <class T> bool rev(T a , T b){return a > b;}
template <class T> int maxpower(T a , T b){int ans = 0;while(a > 0 && a % b == 0){ans++;a /= b;}return ans;}


/*----------------------------- # --- MAIN CODE --- # -----------------------------*/
bool prime(int n){
    if(n == 2) return true;
    lp(i , 2 , (int)sqrt(n) + 1){
        if(n % i == 0) return false;
    }
    return true;
}
ll lcm2(ll a , ll b){
    return (a*b)/gcd<ll>(a , b);
}
int main(){
    fastio;
    ll x , y , a , b , c; cin >> x >> y >> a >> b >> c; ll r[a] , g[b] , l[c];
    ain(r , a); ain(g , b); ain(l , c);
    sort(r , r + a , rev<ll>); sort(g , g + b , rev<ll>); sort(l , l + c , rev<ll>);
    ll rans[x + 1] , gans[y + 1]; rans[0] = gans[0] = 1e9;
    lp(i , 0 , x + 1){
        rans[i + 1] = r[i];
    }
    lp(i , 0 , y + 1){
        gans[i + 1] = g[i];
    }
    ll rp = x , gp = y , lpo = 0;
    while(lpo < c && (rp > 0 || gp > 0)){
        if(rans[rp] < l[lpo] && gans[gp] < l[lpo]){
            if(rans[rp] < gans[gp]) {
                rans[rp] = l[lpo];
                rp--;
                lpo++;
            }
            else {
                gans[gp] = l[lpo];
                gp--;
                lpo++;
            }
        }
        else if(rans[rp] < l[lpo]){
            rans[rp] = l[lpo]; rp--; lpo++;
        }
        else if(gans[gp] < l[lpo]){
            gans[gp] = l[lpo]; gp--; lpo++;
        }
        else{
            lpo++;
        }

    }
    ll ans = 0;
//    aout(rans , x + 1); cout << endl;
//    aout(gans , y + 1); cout << endl;
    lp(i , 1 , x + 1) ans += rans[i];
    lp(i , 1 , y + 1) ans += gans[i];
    cout << ans;
}





















Measured memory_bytes: 3968