#include <iostream>
#include <cstdlib>

using namespace std;

int puff (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;
}

int binSearch(int * array, int size, int element){
	if(size < 2) {
		if(array[0] <= element) return 0;
		return -1;
	}

	int index1 = 0;
	int index2 = size - 1;

	while(index2 > index1) {
		int median = (index1 + index2)/2;

		if(index2 == index1 + 1) {
			if(array[index2] == element) median = index2;
			return array[index2] > element ? index1 : index2;  	
		}

		if(array[median] < element) {
			index1 = median;
		} else if(array[median] > element){
			index2 = median;
		} else {
			while(median + 1 < size && array[median + 1] == element) {
				median++;
			}
			return median;
		}
	}

	return index1;	
}

int main0(){
	int * pole = new int[6];

	pole[0] = 2;
	cout << binSearch(pole, 1, 3) << endl;

	return 0;
}

int main(){
	int lunch, soup, meal, dish, beverage;
	while(cin >> lunch >> soup >> meal >> dish >> beverage){
		if(lunch == 0){
			break;
		}

		int * soups = new int[soup];
		int * meals = new int[meal];
		int * dishes = new int[dish];
		int * beverages = new int[beverage];

		int * soupsC = new int[soup];
		int * mealsC = new int[meal];
		int * dishesC = new int[dish];
		int * beveragesC = new int[beverage];

		int buff;
		int sMinus = 0;
		
		for(int i=0; i<soup; i++){
			cin >> buff;
			if(buff > lunch - 3){
				sMinus++;
			} else {
				soups[i-sMinus] = buff;
			}
		}

		int mMinus = 0;
		for(int i=0; i<meal; i++){
			cin >> buff;
			if(buff > lunch - 3){
				mMinus++;
			} else {
				meals[i-mMinus] = buff;
			}
		}

		int dMinus = 0;
		for(int i=0; i<dish; i++){
			cin >> buff;
			if(buff > lunch - 3){
				dMinus++;
			} else {
				dishes[i-dMinus] = buff;
			}
		}

		int bMinus = 0;
		for(int i=0; i<beverage; i++){
			cin >> buff;
			if(buff > lunch - 3){
				bMinus++;
			} else {
				beverages[i-bMinus] = buff;
			}
		}

		soup -= sMinus;
		meal -= mMinus;
		dish -= dMinus;
		beverage -= bMinus;

		qsort(soups, soup, sizeof(int), puff);
		qsort(meals, meal, sizeof(int), puff);
		qsort(dishes, dish, sizeof(int), puff);
		qsort(beverages, beverage, sizeof(int), puff);

		int index = 0;
		int lastInput = -1;
		for(int i=0; i<soup; i++){
			if(soups[i] == lastInput) {
				soupsC[index - 1]++;			
			} else {
				soups[index] = soups[i];
				soupsC[index] = 1;
				index++;
				lastInput = soups[i];
			}
		}
		soup = index;

		index = 0;
		lastInput = -1;
		for(int i=0; i<meal; i++){
			if(meals[i] == lastInput) {
				mealsC[index - 1]++;			
			} else {
				meals[index] = meals[i];
				mealsC[index] = 1;
				index++;
				lastInput = meals[i];
			}
		}
		meal = index;

		index = 0;
		lastInput = -1;
		for(int i=0; i<dish; i++){
			if(dishes[i] == lastInput) {
				dishesC[index - 1]++;			
			} else {
				dishes[index] = dishes[i];
				dishesC[index] = 1;
				if(index != 0) dishesC[index] += dishesC[index - 1];
				index++;
				lastInput = dishes[i];
				
			}
		}
		dish = index;

		index = 0;
		lastInput = -1;
		for(int i=0; i<beverage; i++){
			if(beverages[i] == lastInput) {
				beveragesC[index - 1]++;			
			} else {
				beverages[index] = beverages[i];
				beveragesC[index] = 1;
				index++;
				lastInput = beverages[i];
			}
		}
		beverage = index;


		unsigned long result = 0UL;		
		
		for(int b=0; b<beverage; b++){
			if(beverages[b] + soups[0] + meals[0] + dishes[0] > lunch)
				break;

			for(int s=0; s<soup; s++){
				if(beverages[b] + soups[s] + meals[0] + dishes[0] > lunch)
							break;

				for(int m=0; m<meal; m++){
					if(beverages[b] + soups[s] + meals[m] + dishes[0] > lunch)
							break;

					int max = lunch - (beverages[b] + soups[s] + meals[m]);

					int indexMax = binSearch(dishes, dish, max);

					if(indexMax != -1 && dishes[indexMax] <= max) {
							result += beveragesC[b] * soupsC[s] * mealsC[m] * dishesC[indexMax];
					}
				}
			}
		}

		cout << result << endl;
	}
	return 0;
}