#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <cmath>
#include <cstring>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <string>
#include <climits>

using namespace std;

#define DBG (x) cout<< #x <<": "<< x <<"\n";

typedef long long ll;
typedef pair<int,int> ii;

int main() {
	ll l,s,m,d,b;
	while(cin >> l >> s >> m >> d >> b){
		if(l == 0 && s == 0 && m == 0 && d == 0 && b == 0){
			return 0;
		}
		
		//ll t[s], u[m], v[d], w[b];
		vector<ll> t(s);
		vector<ll> u(m);
		vector<ll> v(d);
		vector<ll> w(b);
		
		ll i,j;
		for (i = 0; i<s; ++i)cin >> t[i];
		for (i = 0; i<m; ++i)cin >> u[i];
		for (i = 0; i<d; ++i)cin >> v[i];
		for (i = 0; i<b; ++i)cin >> w[i];
		
	
		sort(t.begin(), t.end());
		sort(v.begin(), v.end());
		sort(u.begin(), u.end());
		sort(w.begin(), w.end());
		
		
		vector <ll> tu;
		for (i = 0; i<s; ++i){
			for (j = 0; j<m; ++j){
				if(t[i] + u[j] <= l){
					tu.push_back(t[i] + u[j]);
				} else {
					break;
				}
			}
		}
		
		vector <ll> vw;
		for (i = 0; i<d; ++i){
			for (j = 0; j<b; ++j){
				if(v[i] + w[j] <= l){
					vw.push_back(v[i] + w[j]);
				} else {
					break;
				}
			}
		}
		
		sort(tu.begin(), tu.end());
		sort(vw.begin(), vw.end());
		
		ll out = 0;
		
		i = 0;
		j = vw.size() - 1;
		
		for (i = 0; i < tu.size(); ++i){
			while(tu[i] + vw[j] > l && j > 0){
				j--;
			}
			if(tu[i] + vw[j] > l) break;
			out += j + 1;
		}
		
		cout << out << "\n";
		 
	}
	
	return 0;
}