#include <stdio.h>
#include <algorithm>
#include <cstdlib>
#include <vector>
using namespace std;

int cmp(const void *a, const void *b) {
	 int arg1 = *static_cast<const int*>(a);
    int arg2 = *static_cast<const int*>(b);
 
    if(arg1 < arg2) return -1;
    if(arg1 > arg2) return 1;
    return 0;
 
    // return (arg1 > arg2) - (arg1 < arg2); // possible shortcut
    // return arg1 - arg2; // erroneous shortcut (fails if INT_MIN is present)
}

int main() {
	int price=0, soups=0, mains=0, dezs=0, bevs=0;
	while (scanf("%d %d %d %d %d", &price, &soups, &mains, &dezs, &bevs) == 5 ) {
		if (price == 0 && soups == 0 && mains == 0 && dezs == 0 && bevs == 0)
			break;
		vector<int> s_arr;
		int test;
		for (int i = 0; i < soups; i++){
			scanf("%d", &test);
			s_arr.push_back(test);
		}
		vector<int> m_arr;
		for (int i = 0; i < mains; i++){
			scanf("%d", &test);
			m_arr.push_back(test);
		}
		vector<int> d_arr;
		for (int i = 0; i < dezs; i++){
			scanf("%d", &test);
			d_arr.push_back(test);
		}
		vector<int> b_arr;
		for (int i = 0; i < bevs; i++){
			scanf("%d", &test);
			b_arr.push_back(test);
		}
			
			
		qsort(&(*s_arr.begin()), soups, sizeof(int), cmp);
		qsort(&(*m_arr.begin()), mains, sizeof(int), cmp);
		qsort(&(*d_arr.begin()), dezs, sizeof(int), cmp);
		qsort(&(*b_arr.begin()), bevs, sizeof(int), cmp);
		
		unsigned long long int sum = 0;
		
		for (int s = 0; s < soups; s++) {
			if (s_arr[s] >= price)
				break;
			for (int m = 0; m < mains; m++) {
				if (s_arr[s] + m_arr[m] >= price)
					break;
				for (int d = 0; d < dezs; d++) {
					if (s_arr[s] + m_arr[m] + d_arr[d] >= price)
						break;
					for (int b = 0; b < bevs; b++) {
						if (s_arr[s] + m_arr[m] + d_arr[d] + b_arr[b] <= price)
							sum++;
						else
							break;
							
					}
					//sum += upper_bound(b_arr, b_arr+bevs, price - (s_arr[s] + m_arr[m] + d_arr[d])) - b_arr;
				}
			}
			
		}
		printf("%lld\n", sum);
		//delete [] s_arr;
		//delete [] m_arr;
		//delete [] d_arr;
		//delete [] b_arr;
		
	}
	
	
	
	return 0;
}