You are given an array a consisting of n integers. Each a_i is one of the six following numbers: 4, 8, 15, 16, 23, 42.

Your task is to remove the minimum number of elements to make this array good.

An array of length k is called good if k is divisible by 6 and it is possible to split it into k/6 subsequences 4, 8, 15, 16, 23, 42.

Examples of good arrays:

  * [4, 8, 15, 16, 23, 42] (the whole array is a required sequence); 
  * [4, 8, 4, 15, 16, 8, 23, 15, 16, 42, 23, 42] (the first sequence is formed from first, second, fourth, fifth, seventh and tenth elements and the second one is formed from remaining elements); 
  * [] (the empty array is good). 



Examples of bad arrays: 

  * [4, 8, 15, 16, 42, 23] (the order of elements should be exactly 4, 8, 15, 16, 23, 42); 
  * [4, 8, 15, 16, 23, 42, 4] (the length of the array is not divisible by 6); 
  * [4, 8, 15, 16, 23, 42, 4, 8, 15, 16, 23, 23] (the first sequence can be formed from first six elements but the remaining array cannot form the required sequence). 

Input

The first line of the input contains one integer n (1 ≤ n ≤ 5 ⋅ 10^5) — the number of elements in a.

The second line of the input contains n integers a_1, a_2, ..., a_n (each a_i is one of the following numbers: 4, 8, 15, 16, 23, 42), where a_i is the i-th element of a.

Output

Print one integer — the minimum number of elements you have to remove to obtain a good array.

Examples

Input


5
4 8 15 16 23


Output


5


Input


12
4 8 4 15 16 8 23 15 16 42 23 42


Output


0


Input


15
4 8 4 8 15 16 8 16 23 15 16 4 42 23 42


Output


3
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class LoseIt {
	public static void main(String args[]) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int n = Integer.parseInt(st.nextToken());
		int[] nums = new int[n];
		StringTokenizer st1 = new StringTokenizer(br.readLine());
		for (int i=0; i<n; i++){
			nums[i] = Integer.parseInt(st1.nextToken());

		}
		
		
//calculations
		if (n<6){
			System.out.println(n);
		} else {
		int[][] org = new int[n/6][7];
		
		int zero = 0;
		int one = 0;
		int two = 0;
		int three = 0;
		int four = 0;
		int five = 0;
		
		for (int i=0; i<n; i++){
			if (zero < n/6&& nums[i]==4 && org[zero][6]==0 ){
				org[zero][0] = i;
				org[zero][6]++;
				zero++;
				
			} else if (one < n/6&& nums[i] == 8 && org[one][6]==1 ){
				org[one][1] = i;
				org[one][6]++;
				one++;
				
			} else if (two < n/6&&nums[i] == 15 && org[two][6]==2){
				org[two][2] = i;
				org[two][6]++;
				two++;
				
			} else if (three < n/6&&nums[i] == 16 && org[three][6]==3){
				org[three][3] = i;
				org[three][6]++;
				three++;
				
			} else if (four < n/6&& nums[i] == 23 && org[four][6]==4){
				org[four][4] = i;
				org[four][6]++;
				four++;
				
			} else if (five < n/6&& nums[i] == 42 && org[five][6]==5){
				org[five][5] = i;
				org[five][6]++;
				five++;
				
			}
			
//			for (int[] a:org){
//				for (int b:a){
//					System.out.print(b + "   ");
//				}
//				System.out.println();
//			}
//			System.out.println();
		}
		int rows = Math.min(one, Math.min(two, Math.min(three, Math.min (four, five))));
		
		int good = 0;
		for (int i=0; i<rows; i++){
			boolean inc = true;
			for (int j=0; j<5; j++){
				if (org[i][j]>org[i][j+1]){
//					if (org[rows][j] < org[i][j+1] ){
//						int temp = org[rows][j];
//						org[rows][j] = org[i][j];
//						org [i][j] = temp;
//					} else if(org[i][j] < org[rows][j+1]){
//						int temp = org[rows][j+1];
//						org[rows][j+1] = org[i][j+1];
//						org [i][j+1] = temp;
//					} else
						inc = false;
				}
			}
			if (inc){
				good ++;
			}
		}
//		for (int[] a:org){
//			for (int b:a){
//				System.out.print(b + "   ");
//			}
//			System.out.println();
//		}
		System.out.println(n-good*6);
		}
	}

}
