/**
       **********    ************
	  Author : Avi J Patel
	  University : DAIICT
       **********    ************
**/
#include<bits/stdc++.h>
#include<fstream>
using namespace std;
#define ll long long
#define ull unsigned long long
#define ld long double
#define pb push_back
#define pf push_front
#define mp make_pair 
#define mt make_tuple
#define ff first
#define ss second
#define si size()
#define MOD 1000000007
#define Mod 998244353
#define N 200001
#define large 1844674407370955161
#define For(i,m,n) for(long long i=m;i<n;i++)
#define st(x) sort(x.begin(),x.end())
#define re(x,i) reverse(x.begin()+i,x.end())
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define min_heap priority_queue<int, vector<int>, greater<int>>
#define max_heap priority_queue<int>
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
#define pp pair<pair<int,int>,pair<int,int>>
using namespace __gnu_pbds; 
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> 

bool sortbysec(const pair<int,int> &a, const pair<int,int> &b) 
{ 
    if(a.ss < b.ss) return true; 
	else return false;
}
bool sortbyboth(const pair<int,int> &a, const pair<int,int> &b)
{
	if(a.ff>b.ff) return true;
	else if(a.ff==b.ff) return a.ss<b.ss;
	else return false;
} 
bool sortff_resortss(const pair<int,int> &a, const pair<int,int> &b)
{
	if(a.ff<b.ff) return true;
	else if(a.ff==b.ff) return a.ss>b.ss;
	else return false;
}
bool sortbystring(const string &a, const string &b)
{
	string c=a+b;
	string d=b+a;
	if(c>=d) return true;
	else return false;
}

ll modi(ll a, ll m) 
{ 
    ll m0 = m; 
    ll y = 0, x = 1; 
    if (m == 1) 
      return 0; 
    while (a > 1) 
    { 
        ll q = a / m; 
        ll t = m; 
        m = a % m, a = t; 
        t = y; 
        y = x - q * y; 
        x = t; 
    } 
    if (x < 0) 
       x += m0; 
    return x; 
} 
ll Logn(ll  n, ll r) 
{ 
    return (n > r - 1) ? 1 + Logn(n / r, r) : 0; 
} 

ll power(ll x, ll y, ll p) 
{ 
    ll res = 1;      // Initialize result 
    x = x % p;  // Update x if it is more than or 
    while (y > 0) 
    { 
        if (y & 1) 
            res = (res*x) % p; 
        y = y>>1; // y = y/2 
        x = (x*x) % p; 
    } 
    return res; 
} 


int main()
{
	FAST
	int t=1;
//	cin>>t;
	while(t--)
	{	
		ll x,y,a,b,c;
		cin>>x>>y>>a>>b>>c;
		vector<ll> p(a),q(b),r(c);
		vector<pair<ll,ll>> all(a+b+c);
		for(int i=0;i<a;i++)
		{
			cin>>p[i];
			all.pb({p[i],1});
		}
		for(int i=0;i<b;i++) 
		{
			cin>>q[i];
			all.pb({q[i],2});
		}
		for(int i=0;i<c;i++) 
		{
			cin>>r[i];
			all.pb({r[i],3});
		}
		sort(p.begin(),p.end());
		sort(q.begin(),q.end());
		sort(r.begin(),r.end());
		sort(all.begin(),all.end());
		ll sum=0;
		int red=0,green=0;
		reverse(all.begin(),all.end());
		for(int i=0;i<x+y;i++)
		{
			sum+=all[i].ff;
			if(all[i].ss==1)
			red++;
			else if(all[i].ss==2)
			green++;
		}
		if(red>x)
		{
			vector<pair<ll,ll>> reds;
			for(int i=0;i<x+y;i++)
			{
				if(all[i].ss==1)
				{
					reds.pb(all[i]);
				}
			}
			reverse(reds.begin(),reds.end());
			int loc=x+y;
			int cur=0;
			while(red>x)
			{
				if(all[loc].ss!=1)
				{
					sum-=reds[cur].ff;
					sum+=all[loc].ff;
					red--;
					cur++;
				}
				loc++;
			}
		}
		else if(green>y)
		{
			vector<pair<ll,ll>> greens;
			for(int i=0;i<x+y;i++)
			{
				if(all[i].ss==2)
				{
					greens.pb(all[i]);
				}
			}
			reverse(greens.begin(),greens.end());
			int loc=x+y;
			int cur=0;
			while(green>y)
			{
				if(all[loc].ss!=2)
				{
					sum-=greens[cur].ff;
					sum+=all[loc].ff;
					green--;
					cur++;
				}
				loc++;
			}
		}
		cout<<sum;
	}
	return 0;
}
















Measured memory_bytes: 16176