#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;

int cmp (const void *a, const void *b) {
	return *(int*)a - *(int*)b;
}

int main () {
	int bound, n1, n2, n3, n4;
	int x1[3000];
	int x2[3000];
	int x3[3000];
	int x4[3000];
	
	
	//int value1[4000000];
	//int value2[4000000];


	for ( ; ;) {

		vector<int>value1;
		vector<int>value2;
		
		scanf ("%d%d%d%d%d", &bound, &n1, &n2, &n3, &n4);
		if (bound == 0)
			break;
	
		for (int i = 0; i < n1; i++)
			scanf ("%d", &x1[i]);

		for (int i = 0; i < n2; i++)
			scanf ("%d", &x2[i]);

		for (int i = 0; i < n3; i++)
			scanf ("%d", &x3[i]);

		for (int i = 0; i < n4; i++)
			scanf ("%d", &x4[i]);


		for (int i = 0; i < n1; i++)
			for (int j = 0; j < n2; j++)
				value1.push_back(x1[i] + x2[j]);				
//				value1[i * n2 + j] = x1[i] + x2[j];

		for (int i = 0; i < n3; i++)
			for (int j = 0; j < n4; j++)
				value2.push_back(x3[i] + x4[j]);
//				value2[i * n4 + j] = x3[i] + x4[j];

		n1 = n1 * n2;
		n2 = n3 * n4;

		sort (value1.begin(), value1.end());
		sort (value2.begin(), value2.end());

//		qsort (value1, n1, sizeof(int), cmp);
//		qsort (value2, n2, sizeof(int), cmp);
	
/*		for (int i = 0; i < n1; i++)
			printf ("%d ", value1[i]);
		printf ("\n");

		for (int i = 0; i < n2; i++)
			printf ("%d ", value2[i]);
		printf ("\n");*/	

		long long out = 0;

		for (int i = 0; i < n1; i++) {
			int index = n2 - 1;
			for ( ; ;) {
				if (value1[i] + value2[index] <= bound)
					break;
				
				index--;
				if (index < 0)
					goto next;
			
			}
			out += index + 1;
		}
		next:;
		printf ("%lld\n", out);
	}
	return 0;
}