#define ll long long int
#include <bits/stdc++.h>

using namespace std;

#define         ff               first
#define         ss               second
#define         mp               make_pair
#define         pb               push_back
#define         pf               push_front
#define         vi               vector<ll>
#define         pii              pair<ll,ll>
#define         qi               queue<ll>
#define         mem(a,b)         memset(a,b,sizeof(a))
#define         print(a)         cout << a << '\n'
#define         print2(a)        cout << a << ' '
#define         sorted(arr)      sort(arr.begin(),arr.end())
#define         gcd(a,b)         gcd((a),(b))
#define         lcm(a,b)         ((a)*(b))/gcd((a),(b))
#define         all(v)           v.begin(),v.end()
#define         read(a)          scanf("%d", &a)
#define         f(a,n)           for(ll i = a ; i < n ; i++)
#define         in(a , n)        for(ll i = 0 ; i < n ; i ++) cin >> a[i];
#define         in2(n,m,arr)     for(ll i = 0 ; i < n ; i++){ for(ll j = 0; j < m ; j++) cin >> arr[i][j]; }
#define         debug(a)         cerr<<a<<" ";
#define         debug1(a)        cerr<<a<<'\n'
 

ll mod = 1e9 + 7;
const ll inf = (ll)1e18 + 2;
const ll N = (ll)4e5 + 2;

ll power(ll x , ll y) {
    ll res = 1;
    while (y > 0) {
        if (y & 1)
            res = (res * x) % mod ;
        y = y >> 1;
        x = (x * x) % mod ;
    }
    return res % mod ;
}
void sd() {
    ll x , y , a , b , c;
    cin >> x >> y >> a >> b >> c;
    vector<ll> o , t , th;
    vector<pii> v;
    for(ll i = 0 , h ; i < a ; i ++) cin >> h , v.pb({h , 1});
    for(ll i = 0 , h ; i < b ; i ++) cin >> h , v.pb({h , 2});
    for(ll i = 0 , h ; i < c ; i ++) cin >> h , th.pb(h) , v.pb({h , 0});
    sort(all(v));
    ll cx = 0 , cy = 0, sz = v.size();
    sz --;
    ll ans = 0;
    for(ll i = sz ; i >= 0 ; i --) {
        if(v[i].ss == 1 and x > 0) ans += v[i].ff , x --;
        else if(v[i].ss == 2 and y > 0) ans += v[i].ff , y --;
        else {
            if(x > 0) {
                if(v[i].ss == 0) ans += v[i].ff , cx ++ , x --;
                else if(v[i].ss == 2 and cy > 0) ans += v[i].ff , cy -- , x --;
            }
            else if(y > 0){
                if(v[i].ss == 0) ans += v[i].ff , cy ++ , y --;
                else if(v[i].ss == 1 and cx > 0) ans += v[i].ff , cx -- , y --;
            }
        }
    }
    print(ans);
}
void solve(ll z) {
    ll n , x , y;
    cin >> n >> x >> y;
    for(ll i = 1 ; i < n ; i ++) {
        ll yo = y - 2 , yu = n - x - 1 , io = x + n - y;
        if(max({yo , yu , io}) < i) {
            cout << 0 << '\n';
            return;
        }
        ll ans = n - i , tm = 0;
        if(x - i > 0) tm ++;
        if(x + i < y) tm ++;
        if(y - i > x) tm ++;
        if(y + i <= n) tm ++;
        cout << ans + tm << '\n';
    }
}
/*
 */
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    ll te = 1;
    //cin >> te ;
    ll x = 1;
    while(te --) {
        sd();
    }
    
    cerr << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
    return 0;
}
 

/* ---------------------------------------------------------------------------------------------------------------------



#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag , tree_order_statistics_node_update> Set;

 
vector<ll> ar ;

ll get(ll x) {
    if (x == ar[x])
        return x;
    return ar[x] = get(ar[x]);
}
void merge(ll a ,ll b) {
    a = get(a);
    b = get(b);
    if (a == b) {
        return ;
    }
    ar[b] = ar[a];
 }

ll sev[100006];
vector<ll> pri;
void seive() {
    for(ll i = 2 ; i < 100006 ; i ++) {
        if (!sev[i]) {
            for(ll j = i ; j < 100006 ; j += i) {
                if(!sev[j])
                    sev[j] = i;
            }
        }
        if(sev[i] == i)
            pri.pb(i);
    }
}
 
 ll totient(ll n) {
     ll result = n;
     for(ll i = 2 ; i * i <= n ; i ++){
         if(n % i == 0){
             while(n % i == 0)
                 n /= i;
             result -= result / i;
         }
     }
     if(n > 1)
         result -= result / n;
     return result;
 }
 
 
 ll fen[N];
 void add(ll idx , ll val){
     idx ++;
     while(idx <= N){
         fen[idx] += val;
         idx += (idx & (-idx));
     }
 }
 ll query(ll idx){
     idx ++;
     ll sum = 0;
     while(idx > 0){
         sum += fen[idx];
         idx -= (idx & (-idx));
     }
     return sum;
 }
 
-----------------------------------------------------------------------------------------------------------------------*/


Measured memory_bytes: 11244