#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int L, S, M, D, B,  DB=0;
int Ss[4000], Ms[4000], Ds[4000], Bs[4000];
typedef unsigned long long u64;
int DBs[4000100];

void rd(int*trg, int n) {
	int i;
	for (i = 0; i < n; i++) {
		scanf("%d", trg+i);
	}
}

u64 cntlower(int val) { // count items <= val in DBs
	int left=0, right=DB-1,mid;
	while (right >= left) {
		//fprintf(stderr, "%d %d\n", left, right);
		mid = (left+right) / 2;
		if (DBs[mid] == val) {
			while (DBs[mid] == val) mid++;
			return mid;
		}
		else if (DBs[mid] < val) left = mid+1;
		else                     right = mid-1;
	}
	return left;
}

int dbcmp(int *a, int *b) {
	return *a - *b;
}

int main() {
	while (true) {
		scanf("%d %d %d %d %d", &L, &S, &M, &D, &B);
		if (L == 0) break;
		rd(Ss, S);
		rd(Ms, M);
		rd(Ds, D);
		rd(Bs, B);

		DB=0;

		int s,m,d,b;
		for (d = 0; d < D; d++) {
			for (b = 0; b < B; b++) {
				//fprintf(stderr, "db: %d\n", Ds[d] + Bs[b]);
				DBs[DB++] = Ds[d] + Bs[b];
			}
		}
		qsort(DBs, DB, sizeof(int), dbcmp);
		int i;
		for (i = 0; i < DB; i++) {
				//fprintf(stderr, "dbs: %d\n", DBs[i]);
		}
		u64 r=0;
		for (s = 0; s < S; s++) {
			for (m = 0; m < M; m++) {
				int tmp = cntlower(L - Ss[s] - Ms[m]);
				//fprintf(stderr, "lim: %d v: %d\n", L - Ss[s] - Ms[m], tmp);
				r += tmp;
			}
		}
		printf("%llu\n", r);
	}
	return 0;
}