//28/03/2020
#include<bits/stdc++.h>
#include<cmath>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

#define debug printf("Debug\n");
#define en '\n'


#define ll long long
#define ull unsigned long long

#define pi acos(-1.0)
#define mod 1000000007

#define _fastio  ios_base:: sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define in_fre  freopen("in.txt", "r", stdin);
#define out_fre freopen("out.txt", "w", stdout);

struct Node{
    ll val,pos;
};
struct OverloadedNode{
    ll val,pos;
    bool operator < (const OverloadedNode &rhs) const {
        if(val==rhs.val) return pos<rhs.pos;
        else return val<rhs.val;
    }
};
//Algos
template<typename T> using Pbds=tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>;
//typedef tree<OverloadedNode,null_type,less<OverloadedNode>,rb_tree_tag,tree_order_statistics_node_update>OverloadedPbds;

//Number Theory
template <typename T> T BigMod (T b,T p,T m){if (p == 0) return 1;if (p%2 == 0){T s = BigMod(b,p/2,m);return ((s%m)*(s%m))%m;}return ((b%m)*(BigMod(b,p-1,m)%m))%m;}
template <typename T> T ModInv (T b,T m){return BigMod(b,m-2,m);}
template <typename T> T gcd(T a,T b){if(a<0)return gcd(-a,b);if(b<0)return gcd(a,-b);return (b==0)?a:gcd(b,a%b);}
template <typename T> T lcm(T a,T b) {if(a<0)return lcm(-a,b);if(b<0)return lcm(a,-b);return a*(b/gcd(a,b));}

//Geometry
template <typename T> T Dis(T x1,T y1,T x2, T y2){return sqrt( SQR(x1-x2) + SQR(y1-y2) );}
template <typename T> T Angle(T x1,T y1,T x2, T y2){ return atan2( double(y1-y2) , double(x1-x2));}


/*Containers*/
//vector<ll>v;
//deque<ll>dq;
//stack<ll>stk;
//map<ll,ll>mp;
//unordered_map<ll,ll>ump;
//set<ll>st;
//multiset<ll>mst;
//unordered_set<ll>ust;
//unordered_multiset<ll>umst;
//priority_queue<ll,deque<ll>,greater<ll>>pq;
//Pbds<ll>ost;
/*OverLoaded Containers*/
//vector<OverloadedNode>v;
//deque<OverloadedNode>dq;
//stack<OverloadedNode>stk;
//map<OverloadedNode,OverloadedNode>mp;
//set<OverloadedNode>st;
//multiset<OverloadedNode>mst;
//priority_queue<OverloadedNode>pq;
//OverloadedPbds oost;
/*Global Variables*/

vector<ll>v1,v2,v3;

ll GetAns(ll x,ll y){
    ll ans=0;
    for(ll i=0;i<x;i++) ans+=v1[i];
    for(ll i=0;i<y;i++) ans+=v2[i];
    return ans;
}

int main(){
    _fastio
    ll x,y,a,b,c;
    cin>>x>>y>>a>>b>>c;


    for(ll i=1;i<=a;i++){
        ll x;
        cin>>x;
        v1.push_back(x);
    }

    for(ll i=1;i<=b;i++){
        ll x;
        cin>>x;
        v2.push_back(x);
    }

    for(ll i=1;i<=c;i++){
        ll x;
        cin>>x;
        v3.push_back(x);
    }
    sort(v1.begin(),v1.end(),greater<ll>());
    sort(v2.begin(),v2.end(),greater<ll>());
    sort(v3.begin(),v3.end(),greater<ll>());

    ll l=x-1,r=y-1,k=0;
    ll ans=0;
    ll cnt1=0,cnt2=0;
    while(1){
        if(l<0||r<0||k>=v3.size()||v3[k]<min(v1[l],v2[r])){
            break;
        }
        if(v1[l]<v2[r]){
            v1[l]=v3[k];
            l--;
            k++;
        }
        else{
            v2[r]=v3[k];
            r--;
            k++;
        }

    }

    for(ll i=l;i>=0;i--){
        if(v1[i]<v3[k]&&k<v3.size()){
            v1[i]=v3[k];
            k++;
        }
        else break;
    }
    for(ll i=r;i>=0;i--){
        if(v2[i]<v3[k]&&k<v3.size()){
            v2[i]=v3[k];
            k++;
        }
        else break;
    }

    cout<<GetAns(x,y)<<en;




    return 0;
}


Measured memory_bytes: 3316