/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

import java.util.Arrays;
import java.util.Scanner;

/**
 *
 * @author klempai3
 */
public class JavaApplication1 {

    private static long[] soups = new long[2001];
    private static long[] mains = new long[2001];
    private static long[] deserts = new long[2001];
    private static long[] beverages = new long[2001];
    
    /**
     * @param args the command line arguments+
     * 
     
     * 
     * 
11 3 1 1 1
4 5 6
3
2
1

10 4 5 4 2
3 2 5 7
1 1 8 4 2
3 5 2 1
2 3 
      
     
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            long rozpocet = sc.nextLong();
            int S = sc.nextInt();
            int M = sc.nextInt();
            int D = sc.nextInt();
            int B = sc.nextInt();
            
            if (rozpocet == 0) {
                break;
            }
            
            for (int i = 0; i<S; i++) {
                soups[i] = sc.nextLong();
            }
            
            for (int i = 0; i<M; i++) {
                mains[i] = sc.nextLong();
            }
            for (int i = 0; i<D; i++) {
                deserts[i] = sc.nextLong();
            }
            for (int i = 0; i<B; i++) {
                beverages[i] = sc.nextLong();
            }
            Arrays.sort(soups, 0, S);
            Arrays.sort(mains, 0, M);
            Arrays.sort(deserts, 0, D);
            Arrays.sort(beverages, 0, B);
            
            long pocet = 0;
            
            int vyhovujucePolievky = getMaxAllowedIndex(rozpocet, soups, 0, S);
            
            for (int s = 0; s<vyhovujucePolievky; s++) {
                long cenaPolievky = soups[s];
                int VyhovujuceJedla = getMaxAllowedIndex(rozpocet - cenaPolievky, mains,0,  M);
                
                for (int m = 0; m<VyhovujuceJedla; m++) {
                    long cenaJedla = mains[m];
                    int VyhovujuceDezerty = getMaxAllowedIndex(rozpocet - cenaPolievky - cenaJedla, deserts, 0, D);
                     
                    for (int d = 0; d<VyhovujuceDezerty; d++) {
                        long cenaDezertu = deserts[d];
                        int VyhovujuceNapoje = getMaxAllowedIndex(rozpocet - cenaPolievky - cenaJedla - cenaDezertu, beverages,0,  B);
                        pocet += VyhovujuceNapoje;
                    }
                }
            }
            
            System.out.println(pocet);
        }
    }
    
    private static int getMaxAllowedIndex(long remainingMoney, long[] meals, int mealDownLimit, int mealUpLimit) {
        //return Arrays.binarySearch(meals, 0, mealLimit, remainingMoney);
        
        int diff = mealUpLimit - mealDownLimit;
        
        if (diff == 1) {
            if (meals[mealUpLimit-1] > remainingMoney) {
                return mealUpLimit-1;
            } else {
                return mealUpLimit;
            }
        }
        int a = diff / 2;
        
        if (meals[mealDownLimit + a] > remainingMoney) {
            return getMaxAllowedIndex(remainingMoney, meals, mealDownLimit, mealDownLimit + a);
        } else {
            return getMaxAllowedIndex(remainingMoney, meals, mealDownLimit + a, mealUpLimit);
        }
        
//        for (int i=0; i<mealUpLimit; i++) {
//            if (meals[i] > remainingMoney) {
//                return 0;
//            }
//            
//            else if (i+1 == mealUpLimit) {
//                return i+1;
//            }
//            
//            else if (meals[i] <= remainingMoney && remainingMoney < meals[i+1]) {
//                return i+1;
//            }
//        }
//        
//        return 0;
    }
    
}