/**
 * @author pr4shan7 (प्रशांत)
 */
// everything has a cost!

#ifdef _MAVERICK
#define _DEBUG
#else
#pragma GCC optimize("O2", "unroll-loops", "omit-frame-pointer", "inline")
#pragma GCC option("arch=native", "tune=native", "no-zero-upper")
#pragma GCC target("avx,avx2,fma")
// #pragma GCC reset_options
#endif

#ifndef _DEBUG
#define NDEBUG
#endif

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

using namespace std;
using namespace __gnu_pbds;

#define endl '\n'
// #define cerr cout
// #define int long long
// #define double long double

typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pb_set;
typedef unordered_set<int> usi;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef vector<int> vi;
typedef set<int> si;
typedef long long ll;

#define pb push_back
#define x first
#define y second
#define cai static_cast<int>
#define cad static_cast<double>
#define cal static_cast<long long>
#define all(z) z.begin(), z.end()
#define tr(cont, itm) for (auto&& itm : cont)
#define rep(in, beg, sz) for (int in = beg; in < sz; in++)
#define rrep(in, sz, beg) for (int in = sz - 1; in >= beg; in--)
#define rtr(cont, itr) for (auto itr = cont.end() - 1; itr >= cont.begin(); itr--)

#ifdef _DEBUG
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)

template <typename... T> void debug_out(const T&...);
#else
#define debug(...) 42
#endif

template <typename T> constexpr istream& operator>>(istream&, vector<T>&);
template <typename T> ostream& operator<<(ostream&, const vector<T>&);
double time_it(const chrono::time_point<chrono::high_resolution_clock>&, const chrono::time_point<chrono::high_resolution_clock>&);
template <typename T> constexpr T pow(long long, long long, const T);

const int N = 1e5 + 5;
const int INF = 1e9;
const int MV = 1e9 + 7;

// beautiful things don't ask for attention



int32_t main() {
	const auto start = chrono::high_resolution_clock::now();

	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

#ifdef _MAVERICK
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
	freopen("err.txt", "w", stderr);
#endif


	int x,y,a,b,c; cin >> x>>y>>a>>b>>c;
	vi p(a),q(b),r(c); cin >> p>>q>>r;
	p.pb(-1); q.pb(-1); r.pb(-1);
	sort(all(p),greater<int>());
	sort(all(q),greater<int>());
	sort(all(r),greater<int>());
	debug(p); debug(q); debug(r);

	ll sum{}; int tx{x},ty{y};
	int ip{},ir{},iq{};
	while(ip+ir+iq<x+y) {
		debug(ip,ir,iq,tx,ty);
		int val=max(p[ip],max(q[iq],r[ir]));

		if(ip!=a&&val==p[ip]&&tx>0) {
			sum+=p[ip]; tx--;
			ip++;
		} else if (iq!=b&&val==q[iq]&&ty>0) {
			sum+=q[iq]; ty--;
			iq++;
		} else if (ir!=c&&val==r[ir]) {
			sum+=r[ir];
			ir++;
		} else if(val==p[ip]) {
			val=max(q[iq],r[ir]);
			if(val==q[iq]&&iq!=b&&ty) {
				sum+=q[iq++]; ty--;
			} else if(ir!=c) {
				sum+=r[ir++]; 
			}
		} else {
			val=max(p[ip],r[ir]);
			if(val==p[ip]) { sum+=p[ip++]; tx--;}
			else sum+=r[ir++];
		}
		// } else if(ip!=a&&p[ip]>q[iq]&&tx) {
		// 	sum+=p[ip]; ip++; tx--;
		// } else if(iq!=b&&ty) {
		// 	sum+=q[iq]; iq++; ty--;
		// } else {
		// 	sum+=p[ip]; ip++; tx--;
		// }
	}
	cout << sum;
	const auto end = chrono::high_resolution_clock::now();
	time_it(start, end);

	return 0;
}


#ifdef _DEBUG
template <typename... T>
inline void debug_out(const T&... args) { ((cerr << ' ' << args), ...); cerr << endl; }
#endif

template <typename T>
constexpr inline istream& operator>>(istream& in, vector<T>& ar) {
	for (auto& i : ar) in >> i;
	return in;
}

template <typename T>
inline ostream& operator<<(ostream& out, const vector<T>& ar) {
	for (int i = 0; i < ar.size() - 1; i++) out << ar[i] << ' ';
	if(ar.size()) out << ar[ar.size() - 1];
	return out;
}

inline double time_it(const chrono::time_point<chrono::high_resolution_clock>& start, const chrono::time_point<chrono::high_resolution_clock>& end) {
	chrono::duration<double, milli> time_taken = end - start;
#ifdef _MAVERICK
	cerr << endl << fixed << setprecision(3) << "time taken: " << time_taken.count() << " ms";
#endif
	return time_taken.count();
}

template <typename T>
constexpr T pow(long long a, long long b, const T mv) {
	long long res = 1;
	a %= mv;
	while (b) {
		if (b & 1)
			res = (res * a) % mv;
		b >>= 1;
		a = (a * a) % mv;
	}
	return res;
}

// get busy living or get busy dying


Measured memory_bytes: 1792