#include <bits/stdc++.h>
using namespace std;
using ll = long long;
 
long long readInt(long long l,long long r,char endd){
	long long x=0;
	int cnt=0;
	int fi=-1;
	bool is_neg=false;
	while(true){
		char g=getchar();
		if(g=='-'){
			assert(fi==-1);
			is_neg=true;
			continue;
		}
		if('0'<=g && g<='9'){
			x*=10;
			x+=g-'0';
			if(cnt==0){
				fi=g-'0';
			}
			cnt++;
			assert(fi!=0 || cnt==1);
			assert(fi!=0 || is_neg==false);
 
			assert(!(cnt>19 || ( cnt==19 && fi>1) ));
		} else if(g==endd){
			if(is_neg){
				x= -x;
			}
			assert(l<=x && x<=r);
			return x;
		} else {
			assert(false);
		}
	}
}
string readString(int l,int r,char endd){
	string ret="";
	int cnt=0;
	while(true){
		char g=getchar();
		assert(g!=-1);
		if(g==endd){
			break;
		}
		cnt++;
		ret+=g;
	}
	assert(l<=cnt && cnt<=r);
	return ret;
}
long long readIntSp(long long l,long long r){
	return readInt(l,r,' ');
}
long long readIntLn(long long l,long long r){
	return readInt(l,r,'\n');
}
string readStringLn(int l,int r){
	return readString(l,r,'\n');
}
string readStringSp(int l,int r){
	return readString(l,r,' ');
}

long long P10(int x){
  return x == 0 ? 1 : 10 * P10(x - 1);
}

template <typename T, typename R = long long> 
vector<T> readArr(int len, R l, R r){
  vector<T> a(len);
  for(int i = 0; i < len; i++){
    if(i + 1 < len){
      a[i] = readIntSp(l, r);
    } else {
      a[i] = readIntLn(l, r);
    }
  }
  return a;
}

int main(){
  int t = readIntLn(1, P10(5));
  int sum_n = 0;
  while(t--){
    int n = readIntLn(1, 5 * P10(5));
    sum_n += n;
    auto A = readArr<int>(n, 1ll, P10(9));
    auto B = readArr<int>(n, 1ll, P10(9));
    auto C = readArr<int>(n, 1ll, P10(9));
    int k1 = readIntSp(0, n);
    int k2 = readIntLn(0, n);
    ll ans = 0;
    vector<pair<ll, ll>> p;
    for(int i = 0; i < n; i++){
      ans += C[i];
      p.push_back({A[i] - C[i], B[i] - C[i]});
    }
    sort(p.begin(), p.end(), [&](auto a, auto b){
      return a.first - a.second > b.first - b.second;
    });
    vector<ll> pref(n + 1), suff(n + 1);
    priority_queue<ll, vector<ll>, greater<ll>> pq;
    ll sum = 0;
    for(int i = 0; i < n; i++){
      if(p[i].first > 0){
        pq.push(p[i].first);
        sum += p[i].first;
      }
      if(pq.size() > k1){
        sum -= pq.top();
        pq.pop();
      }
      pref[i + 1] = sum;
    }
    sum = 0;
    while(!pq.empty()) pq.pop();
    for(int i = n - 1; i >= 0; i--){
      if(p[i].second > 0){
        pq.push(p[i].second);
        sum += p[i].second;
      }
      if(pq.size() > k2){
        sum -= pq.top();
        pq.pop();
      }
      suff[i] = sum;
    }
    ll add = 0;
    for(int i = 0; i <= n; i++){
      add = max(add, pref[i] + suff[i]);
    }
    cout << ans + add << '\n';
  }
  assert(1 <= sum_n && sum_n <= 5 * P10(5));
  return 0;
}