#include <iostream>
#include <string>
#include <set>
#include <vector>

#define multi_set multiset

using namespace std;

void read(multi_set<int> &vec, const int num) {
	int n;
	for (int i = 0; i < num; ++i) {
		cin >> n;
		vec.insert(n);
	}
}

unsigned long cnt = 0;

void evaluate(vector<multi_set<int> > &m, int max, int mi=0) {
	for (set<int>::iterator i = m[mi].begin(); i != m[mi].end(); ++i) {
		if (*i > max) {
			break;
		}
		if (mi == 3) {
			++ cnt;
			continue;
		}
		evaluate(m, max-*i, mi+1);
	}
}

int main() {
	while (1) {
		int L, S, M, D, B;
		cin >> L >> S >> M >> D >> B;
		if (L+S+M+D+B == 0) {
			break;
		}
		vector<multi_set<int> > meals;
		meals.push_back(multi_set<int>()); read(meals.back(), S);
		meals.push_back(multi_set<int>()); read(meals.back(), M);
		meals.push_back(multi_set<int>()); read(meals.back(), D);
		meals.push_back(multi_set<int>()); read(meals.back(), B);
		evaluate(meals, L);
		cout << cnt << endl;
		cnt = 0;
	}
	return 0;
}