/* *****fireice**** */

#include<bits/stdc++.h>

#define ll long long int
#define vi vector<int>
#define vc vector<char>
#define vl vector<ll>
#define vii vector<pair<int,int>>
#define vll vector<pair<ll,ll>>
#define pii pair<int,int>
#define pb push_back
#define el '\n'
#define N 1000000007
#define re return
#define F first
#define S second
#define L length
#define mp make_pair
#define PI 3.14159265
#define all(a) (a).begin(),(a).end()
#define forup(i,n) for(int i=0;i<n;i++)
#define forf(i,x,n) for(int i=x;i<n;i++)
#define ford(i,n) for(int (i)=(n)-1;i>=0;(i)--)
#define take(a,n) forup(i,n) cin>>a[i];
using namespace std;

int gcdExtended(int a, int b, int *x, int *y)
{
    // Base Case
    if (a == 0)
    {
        *x = 0, *y = 1;
        return b;
    }

    int x1, y1; // To store results of recursive call
    int gcd = gcdExtended(b%a, a, &x1, &y1);

    // Update x and y using results of recursive
    // call
    *x = y1 - (b/a) * x1;
    *y = x1;

    return gcd;
}

ll modInverse(int a, int m)
{
    int x, y;
    int g = gcdExtended(a, m, &x, &y);
        // m is added to handle negative x
    ll res = ((ll)x%m + (ll)m) % m;

    return res;
}

ll poww(ll x,ll n)
{
    if(n==0)
        return 1;
    else if(n%2 == 0)        //n is even
        return poww(x*x,n/2);
    else                             //n is odd
        return x*poww(x*x,(n-1)/2);
}

ll modularExponentiation(ll x,ll n,ll M)
{
    ll result=1;
    while(n>0)
    {
        if(n % 2 ==1)
            result=(result * x)%M;
        x=(x*x)%M;
        n=n/2;
    }
    return result;
}

inline ll max(ll a, ll b)
{
  if(a>b) re a;
  else re b;
}

inline ll min(ll a, ll b)
{
  if(a>b) re b;
  else re a;
}

int gcd(int a, int b)
{
    if (a == 0)
       return b;
    if (b == 0)
       return a;

    if (a == b)
        return a;

    if (a > b)
        return gcd(a-b, b);
    else return gcd(a, b-a);
}

ll ncr(int n,int r)
{
  ll ans=1;
  r=min(r,n-r);
  forup(i,r)
  {
    ans=(ans*(n-i)/(i+1))%N;
  }
  re ans;
}

int main()
{
  ios::sync_with_stdio(false);
  cin.tie(NULL);

  int t=1;
  //cin>>t;
  while(t--)
  {
    ll n,m,k;
    ll x,y,a,b,c;
    cin>>x>>y>>a>>b>>c;
    // cin>>n;
    int d1[a],d2[b],d3[c];
    take(d1,a);
    take(d2,b);
    take(d3,c);
    sort(d1,d1+a,greater<int>());sort(d2,d2+b,greater<int>());sort(d3,d3+c);
    a--;b--;c--;
    x--;y--;
    ll ans=0;
    while(x>=0 || y>=0)
    {
      if(x>=0 && y>=0)
      {
        if(c>=0 && d3[c]>d1[x] && d1[x]<=d2[y])
        {
          ans+=d3[c];
          c--;
          x--;
        }
        else if(c>=0 && d3[c]>d2[y] && d1[x]>=d2[y])
        {
          ans+=d3[c];
          c--;
          y--;
        }
        else
        {
          while(x>=0)
          {
            ans+=d1[x--];
          }
          while(y>=0)
          {
            ans+=d2[y--];
          }
        }
      }
      else if(x>=0)
      {
        if(c>=0 && d3[c]>d1[x])
        {
          ans+=d3[c];
          c--;
          x--;
        }
        else
        {
          while(x>=0)
          {
            ans+=d1[x--];
          }
        }
      }
      else
      {
        if(c>=0 && d3[c]>d2[y])
        {
          ans+=d3[c];
          c--;
          y--;
        }
        else
        {
          while(y>=0)
          {
            ans+=d2[y--];
          }
        }
      }

    }
    cout<<ans<<el;

  }


  return 0;
}


Measured memory_bytes: 1408