import java.util.ArrayList;
import java.util.Scanner;

class Main{

	static int N;
	static int M;
	static 		ArrayList<ArrayList<Integer>> map;
	static boolean[] used;
	static int f = 0;
	static int s = 0;

	static long mod = 1000000007;
	static ArrayList<Integer> saitan;




	public static void main(String[] args) {


		Scanner sc = new Scanner(System.in);			//文字の入力
		int n = sc.nextInt();
		int[] a = new int[n];

		boolean[] color = new boolean[8];
		int godcolor = 0;


		for(int i = 0;i < n;i++){
			a[i] =sc.nextInt();
			if(a[i] < 400){
				color[0] = true;
			}else if(a[i] < 800){
				color[1] = true;

			}else if(a[i] < 1200){
				color[2] = true;

			}else if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			}
		}

		int ansmax = 0;
		int ansmin = 0;
		int count = 0;

		for(int i = 0;i <8;i++){
			if(color[i]){
				count++;
			}
		}
		
		ansmax = count + godcolor;
		ansmin = count;
		if(ansmin == 0){
			ansmin = 1;
		}
		System.out.println(ansmin + " "+ansmax);
		



	}
	static int lowerbond(int k, int[] data){		//kより小さい最小の値をdataの中から探し、返す二分探索
		int min = -1;
		int max = data.length;

		while(max-min > 1){
			int mid = (max+min)/2;
			if(data[mid] >= k){
				max = mid;
			}else{
				min = mid;
			}
		}
		return data[max];
	}


	static long cal(int n){
		long x = (long)n;
		for(int i = n-1;i > 0;i--){
			//	System.out.println(i);
			x *= i;
			x %= mod;
		}
		return x;
	}

}

 import java.util.ArrayList; ArrayList java.util import java.util.Scanner; Scanner java.util class Main{

	static int N;
	static int M;
	static 		ArrayList<ArrayList<Integer>> map;
	static boolean[] used;
	static int f = 0;
	static int s = 0;

	static long mod = 1000000007;
	static ArrayList<Integer> saitan;




	public static void main(String[] args) {


		Scanner sc = new Scanner(System.in);			//文字の入力
		int n = sc.nextInt();
		int[] a = new int[n];

		boolean[] color = new boolean[8];
		int godcolor = 0;


		for(int i = 0;i < n;i++){
			a[i] =sc.nextInt();
			if(a[i] < 400){
				color[0] = true;
			}else if(a[i] < 800){
				color[1] = true;

			}else if(a[i] < 1200){
				color[2] = true;

			}else if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			}
		}

		int ansmax = 0;
		int ansmin = 0;
		int count = 0;

		for(int i = 0;i <8;i++){
			if(color[i]){
				count++;
			}
		}
		
		ansmax = count + godcolor;
		ansmin = count;
		if(ansmin == 0){
			ansmin = 1;
		}
		System.out.println(ansmin + " "+ansmax);
		



	}
	static int lowerbond(int k, int[] data){		//kより小さい最小の値をdataの中から探し、返す二分探索
		int min = -1;
		int max = data.length;

		while(max-min > 1){
			int mid = (max+min)/2;
			if(data[mid] >= k){
				max = mid;
			}else{
				min = mid;
			}
		}
		return data[max];
	}


	static long cal(int n){
		long x = (long)n;
		for(int i = n-1;i > 0;i--){
			//	System.out.println(i);
			x *= i;
			x %= mod;
		}
		return x;
	}

} Main static int N; N static int M; M static 		ArrayList<ArrayList<Integer>> map; map static boolean[] used; used static int f = 0; f 0 static int s = 0; s 0 static long mod = 1000000007; mod 1000000007 static ArrayList<Integer> saitan; saitan public static void main(String[] args) {


		Scanner sc = new Scanner(System.in);			//文字の入力
		int n = sc.nextInt();
		int[] a = new int[n];

		boolean[] color = new boolean[8];
		int godcolor = 0;


		for(int i = 0;i < n;i++){
			a[i] =sc.nextInt();
			if(a[i] < 400){
				color[0] = true;
			}else if(a[i] < 800){
				color[1] = true;

			}else if(a[i] < 1200){
				color[2] = true;

			}else if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			}
		}

		int ansmax = 0;
		int ansmin = 0;
		int count = 0;

		for(int i = 0;i <8;i++){
			if(color[i]){
				count++;
			}
		}
		
		ansmax = count + godcolor;
		ansmin = count;
		if(ansmin == 0){
			ansmin = 1;
		}
		System.out.println(ansmin + " "+ansmax);
		



	} main {


		Scanner sc = new Scanner(System.in);			//文字の入力
		int n = sc.nextInt();
		int[] a = new int[n];

		boolean[] color = new boolean[8];
		int godcolor = 0;


		for(int i = 0;i < n;i++){
			a[i] =sc.nextInt();
			if(a[i] < 400){
				color[0] = true;
			}else if(a[i] < 800){
				color[1] = true;

			}else if(a[i] < 1200){
				color[2] = true;

			}else if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			}
		}

		int ansmax = 0;
		int ansmin = 0;
		int count = 0;

		for(int i = 0;i <8;i++){
			if(color[i]){
				count++;
			}
		}
		
		ansmax = count + godcolor;
		ansmin = count;
		if(ansmin == 0){
			ansmin = 1;
		}
		System.out.println(ansmin + " "+ansmax);
		



	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc int[] a = new int[n]; a new int[n] n boolean[] color = new boolean[8]; color new boolean[8] 8 int godcolor = 0; godcolor 0 for(int i = 0;i < n;i++){
			a[i] =sc.nextInt();
			if(a[i] < 400){
				color[0] = true;
			}else if(a[i] < 800){
				color[1] = true;

			}else if(a[i] < 1200){
				color[2] = true;

			}else if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			a[i] =sc.nextInt();
			if(a[i] < 400){
				color[0] = true;
			}else if(a[i] < 800){
				color[1] = true;

			}else if(a[i] < 1200){
				color[2] = true;

			}else if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			}
		} {
			a[i] =sc.nextInt();
			if(a[i] < 400){
				color[0] = true;
			}else if(a[i] < 800){
				color[1] = true;

			}else if(a[i] < 1200){
				color[2] = true;

			}else if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			}
		} a[i] =sc.nextInt() a[i] a i sc.nextInt() sc.nextInt sc if(a[i] < 400){
				color[0] = true;
			}else if(a[i] < 800){
				color[1] = true;

			}else if(a[i] < 1200){
				color[2] = true;

			}else if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			} a[i] < 400 a[i] a i 400 {
				color[0] = true;
			} color[0] = true color[0] color 0 true if(a[i] < 800){
				color[1] = true;

			}else if(a[i] < 1200){
				color[2] = true;

			}else if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			} a[i] < 800 a[i] a i 800 {
				color[1] = true;

			} color[1] = true color[1] color 1 true if(a[i] < 1200){
				color[2] = true;

			}else if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			} a[i] < 1200 a[i] a i 1200 {
				color[2] = true;

			} color[2] = true color[2] color 2 true if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			} a[i] < 1600 a[i] a i 1600 {
				color[3] = true;

			} color[3] = true color[3] color 3 true if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			} a[i] < 2000 a[i] a i 2000 {
				color[4] = true;

			} color[4] = true color[4] color 4 true if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			} a[i] < 2400 a[i] a i 2400 {
				color[5] = true;

			} color[5] = true color[5] color 5 true if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			} a[i] < 2800 a[i] a i 2800 {
				color[6] = true;

			} color[6] = true color[6] color 6 true if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			} a[i] < 3200 a[i] a i 3200 {
				color[7] = true;

			} color[7] = true color[7] color 7 true {
				godcolor++;
			} godcolor++ godcolor int ansmax = 0; ansmax 0 int ansmin = 0; ansmin 0 int count = 0; count 0 for(int i = 0;i <8;i++){
			if(color[i]){
				count++;
			}
		} int i = 0; int i = 0; i 0 i <8 i 8 i++ i++ i {
			if(color[i]){
				count++;
			}
		} {
			if(color[i]){
				count++;
			}
		} if(color[i]){
				count++;
			} color[i] color i {
				count++;
			} count++ count ansmax = count + godcolor ansmax count + godcolor count godcolor ansmin = count ansmin count if(ansmin == 0){
			ansmin = 1;
		} ansmin == 0 ansmin 0 {
			ansmin = 1;
		} ansmin = 1 ansmin 1 System.out.println(ansmin + " "+ansmax) System.out.println System.out System System.out ansmin + " "+ansmax ansmin + " "+ansmax ansmin " " ansmax String[] args args static int lowerbond(int k, int[] data){		//kより小さい最小の値をdataの中から探し、返す二分探索
		int min = -1;
		int max = data.length;

		while(max-min > 1){
			int mid = (max+min)/2;
			if(data[mid] >= k){
				max = mid;
			}else{
				min = mid;
			}
		}
		return data[max];
	} lowerbond {		//kより小さい最小の値をdataの中から探し、返す二分探索
		int min = -1;
		int max = data.length;

		while(max-min > 1){
			int mid = (max+min)/2;
			if(data[mid] >= k){
				max = mid;
			}else{
				min = mid;
			}
		}
		return data[max];
	} int min = -1; min -1 1 int max = data.length; max data.length data data.length while(max-min > 1){
			int mid = (max+min)/2;
			if(data[mid] >= k){
				max = mid;
			}else{
				min = mid;
			}
		} max-min > 1 max-min max min 1 {
			int mid = (max+min)/2;
			if(data[mid] >= k){
				max = mid;
			}else{
				min = mid;
			}
		} int mid = (max+min)/2; mid (max+min)/2 (max+min) max min 2 if(data[mid] >= k){
				max = mid;
			}else{
				min = mid;
			} data[mid] >= k data[mid] data mid k {
				max = mid;
			} max = mid max mid {
				min = mid;
			} min = mid min mid return data[max]; data[max] data max int k k int[] data data static long cal(int n){
		long x = (long)n;
		for(int i = n-1;i > 0;i--){
			//	System.out.println(i);
			x *= i;
			x %= mod;
		}
		return x;
	} cal {
		long x = (long)n;
		for(int i = n-1;i > 0;i--){
			//	System.out.println(i);
			x *= i;
			x %= mod;
		}
		return x;
	} long x = (long)n; x (long)n for(int i = n-1;i > 0;i--){
			//	System.out.println(i);
			x *= i;
			x %= mod;
		} int i = n-1; int i = n-1; i n-1 n 1 i > 0 i 0 i-- i-- i {
			//	System.out.println(i);
			x *= i;
			x %= mod;
		} {
			//	System.out.println(i);
			x *= i;
			x %= mod;
		} x *= i x i x %= mod x mod return x; x int n n
import java.util.ArrayList;
import java.util.Scanner;

class Main{

	static int N;
	static int M;
	static 		ArrayList<ArrayList<Integer>> map;
	static boolean[] used;
	static int f = 0;
	static int s = 0;

	static long mod = 1000000007;
	static ArrayList<Integer> saitan;




	public static void main(String[] args) {


		Scanner sc = new Scanner(System.in);			//文字の入力
		int n = sc.nextInt();
		int[] a = new int[n];

		boolean[] color = new boolean[8];
		int godcolor = 0;


		for(int i = 0;i < n;i++){
			a[i] =sc.nextInt();
			if(a[i] < 400){
				color[0] = true;
			}else if(a[i] < 800){
				color[1] = true;

			}else if(a[i] < 1200){
				color[2] = true;

			}else if(a[i] < 1600){
				color[3] = true;

			}else if(a[i] < 2000){
				color[4] = true;

			}else if(a[i] < 2400){
				color[5] = true;

			}else if(a[i] < 2800){
				color[6] = true;

			}else if(a[i] < 3200){
				color[7] = true;

			}else{
				godcolor++;
			}
		}

		int ansmax = 0;
		int ansmin = 0;
		int count = 0;

		for(int i = 0;i <8;i++){
			if(color[i]){
				count++;
			}
		}
		
		ansmax = count + godcolor;
		ansmin = count;
		if(ansmin == 0){
			ansmin = 1;
		}
		System.out.println(ansmin + " "+ansmax);
		



	}
	static int lowerbond(int k, int[] data){		//kより小さい最小の値をdataの中から探し、返す二分探索
		int min = -1;
		int max = data.length;

		while(max-min > 1){
			int mid = (max+min)/2;
			if(data[mid] >= k){
				max = mid;
			}else{
				min = mid;
			}
		}
		return data[max];
	}


	static long cal(int n){
		long x = (long)n;
		for(int i = n-1;i > 0;i--){
			//	System.out.println(i);
			x *= i;
			x %= mod;
		}
		return x;
	}

}


