#include <iostream>
#include <iomanip>
#include <vector>
#include <limits>
#include <algorithm>
#include <cctype>
#include <cmath>
#include <queue>
#include <set>
#include <bitset>
#include <map>
#include <cstdlib>
#include <cstring>
#include <sstream>

#define REP(i, n) for(int i=0;i<(n);++i)
#define REPE(i, n) for(int i=0;i<=(n);++i) 
#define REPA(i, a, b) for(int i=(a);i<(b);++i)
#define REPAE(i, a, b) for(int i=(a);i<=(b);++i) 

using namespace std;

typedef unsigned long long int ULINT;
typedef long long int LINT;
typedef pair<int,int> PPI;

LINT L, S,M,D,B;

LINT Sarr[2007];
LINT Marr[2007];
LINT Barr[2007];
LINT Darr[2007];

LINT SMind;
LINT SM[4000007];
LINT BDind;
vector<LINT> BD;

bool process() {
	cin >> L >> S >> M >> D >> B;
	if(L == 0 && S == 0 && M == 0 && B == 0 && D == 0) return false;
		
	REP(i, S) cin >> Sarr[i];
	REP(i, M) cin >> Marr[i];
	REP(i, D) cin >> Darr[i];
	REP(i, B) cin >> Barr[i];
	
	SMind = 0;
	REP(i, S)
	REP(j, M) {
	SM[SMind++] = Sarr[i] + Marr[j];
	//cout << Sarr[i] + Marr[j] << endl;
	}
	BD.clear();
	BDind = 0;
	REP(i, B)
	REP(j, D)
	BD.push_back(Barr[i] + Darr[j]);
	
	sort(BD.begin(), BD.end());
	
	//for(LINT n : BD)
	 //cout << n << ' ';
	
	LINT lecnt = 0;
	
	REP(i, SMind) {
		LINT tofind = L - SM[i];
		if(tofind < 0) continue;
		auto ret = upper_bound(BD.begin(), BD.end(), tofind);
		if(ret == BD.end()) {
			lecnt += BD.size();
		}
		else {
			LINT cnt = ret - BD.begin();

			lecnt += cnt;
		}

		
	}

	cout << lecnt << endl;	

	return true;
}

int main() {
	
	while(process());

	return 0;
}