/*
* @Author Silviase(@silviasetitech)
* For ProCon
*/

import java.util.*;
import java.lang.*;
import java.math.*;

class Main{

    static int n;
    static int m;
    static int ans;
    static int[] rate;
    static int var;
    static int ansmin;
    static int ansmax;
    static int[] w;
    static int[] ww;
    static boolean[] visit;
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        n = sc.nextInt();
        ansmin = 0;
        ansmax = 0;
        rate = new int[9];
        for (int i = 0; i < n; i++) {
            int tmp = sc.nextInt();
            if (tmp >= 3200) {
                tmp = 3200;
            }
            rate[tmp/400]++;
        }
        for (int i = 0; i < 7; i++) {
            if (rate[i] != 0) {
                ansmin++;
                ansmax++;
            }
        }
        if (rate[7] == 0) {
            if (rate[8] != 0) {
                ansmin++;
                ansmax+=rate[8];
            }
        }else{
            ansmin++;
            ansmax++;
            if (rate[8] != 0) {
                ansmax+=(rate[8]);
            }
        }

        System.out.println(ansmin + " " + ansmax);

        sc.close();
    }

    public static void dfs(int placenow) {
        // if went all -> success! 
        // if not went all -> fail...
        
        /*
         dfs
         Go All Place that there is way to and not having been yet. 

         if island 1 is start point, dfs(1);
         if there is way to island 2 and island 3,
         - island 2 changes non-visited -> visited, and dfs(2).
         - island 3 changes non-visited -> visited, and dfs(3).
         

        */

        visit[placenow] = true;
        boolean success = true;
        for (int i = 0; i < n; i++) {
            if (visit[i] == false) { // not go all place
                success = false;
                break;
            }
        }
        if (success) {
            ans++;
            visit[placenow] = false;
            return;
        }

        for (int i = 0; i < m; i++) {
            if (w[i] == placenow && visit[ww[i]] == false ) {
                dfs(ww[i]);
            }else if(ww[i] == placenow && visit[w[i]] == false){
                dfs(w[i]);
            }else{
                continue;
            }
        }
        visit[placenow] = false;
        return;
    }

}
 import java.util.*; util.* java import java.lang.*; lang.* java import java.math.*; math.* java class Main{

    static int n;
    static int m;
    static int ans;
    static int[] rate;
    static int var;
    static int ansmin;
    static int ansmax;
    static int[] w;
    static int[] ww;
    static boolean[] visit;
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        n = sc.nextInt();
        ansmin = 0;
        ansmax = 0;
        rate = new int[9];
        for (int i = 0; i < n; i++) {
            int tmp = sc.nextInt();
            if (tmp >= 3200) {
                tmp = 3200;
            }
            rate[tmp/400]++;
        }
        for (int i = 0; i < 7; i++) {
            if (rate[i] != 0) {
                ansmin++;
                ansmax++;
            }
        }
        if (rate[7] == 0) {
            if (rate[8] != 0) {
                ansmin++;
                ansmax+=rate[8];
            }
        }else{
            ansmin++;
            ansmax++;
            if (rate[8] != 0) {
                ansmax+=(rate[8]);
            }
        }

        System.out.println(ansmin + " " + ansmax);

        sc.close();
    }

    public static void dfs(int placenow) {
        // if went all -> success! 
        // if not went all -> fail...
        
        /*
         dfs
         Go All Place that there is way to and not having been yet. 

         if island 1 is start point, dfs(1);
         if there is way to island 2 and island 3,
         - island 2 changes non-visited -> visited, and dfs(2).
         - island 3 changes non-visited -> visited, and dfs(3).
         

        */

        visit[placenow] = true;
        boolean success = true;
        for (int i = 0; i < n; i++) {
            if (visit[i] == false) { // not go all place
                success = false;
                break;
            }
        }
        if (success) {
            ans++;
            visit[placenow] = false;
            return;
        }

        for (int i = 0; i < m; i++) {
            if (w[i] == placenow && visit[ww[i]] == false ) {
                dfs(ww[i]);
            }else if(ww[i] == placenow && visit[w[i]] == false){
                dfs(w[i]);
            }else{
                continue;
            }
        }
        visit[placenow] = false;
        return;
    }

} Main static int n; n static int m; m static int ans; ans static int[] rate; rate static int var; var static int ansmin; ansmin static int ansmax; ansmax static int[] w; w static int[] ww; ww static boolean[] visit; visit public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        n = sc.nextInt();
        ansmin = 0;
        ansmax = 0;
        rate = new int[9];
        for (int i = 0; i < n; i++) {
            int tmp = sc.nextInt();
            if (tmp >= 3200) {
                tmp = 3200;
            }
            rate[tmp/400]++;
        }
        for (int i = 0; i < 7; i++) {
            if (rate[i] != 0) {
                ansmin++;
                ansmax++;
            }
        }
        if (rate[7] == 0) {
            if (rate[8] != 0) {
                ansmin++;
                ansmax+=rate[8];
            }
        }else{
            ansmin++;
            ansmax++;
            if (rate[8] != 0) {
                ansmax+=(rate[8]);
            }
        }

        System.out.println(ansmin + " " + ansmax);

        sc.close();
    } main {
        Scanner sc = new Scanner(System.in);
        
        n = sc.nextInt();
        ansmin = 0;
        ansmax = 0;
        rate = new int[9];
        for (int i = 0; i < n; i++) {
            int tmp = sc.nextInt();
            if (tmp >= 3200) {
                tmp = 3200;
            }
            rate[tmp/400]++;
        }
        for (int i = 0; i < 7; i++) {
            if (rate[i] != 0) {
                ansmin++;
                ansmax++;
            }
        }
        if (rate[7] == 0) {
            if (rate[8] != 0) {
                ansmin++;
                ansmax+=rate[8];
            }
        }else{
            ansmin++;
            ansmax++;
            if (rate[8] != 0) {
                ansmax+=(rate[8]);
            }
        }

        System.out.println(ansmin + " " + ansmax);

        sc.close();
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) n = sc.nextInt() n sc.nextInt() sc.nextInt sc ansmin = 0 ansmin 0 ansmax = 0 ansmax 0 rate = new int[9] rate new int[9] 9 for (int i = 0; i < n; i++) {
            int tmp = sc.nextInt();
            if (tmp >= 3200) {
                tmp = 3200;
            }
            rate[tmp/400]++;
        } int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
            int tmp = sc.nextInt();
            if (tmp >= 3200) {
                tmp = 3200;
            }
            rate[tmp/400]++;
        } {
            int tmp = sc.nextInt();
            if (tmp >= 3200) {
                tmp = 3200;
            }
            rate[tmp/400]++;
        } int tmp = sc.nextInt(); tmp sc.nextInt() sc.nextInt sc if (tmp >= 3200) {
                tmp = 3200;
            } tmp >= 3200 tmp 3200 {
                tmp = 3200;
            } tmp = 3200 tmp 3200 rate[tmp/400]++ rate[tmp/400] rate tmp/400 tmp 400 for (int i = 0; i < 7; i++) {
            if (rate[i] != 0) {
                ansmin++;
                ansmax++;
            }
        } int i = 0; int i = 0; i 0 i < 7 i 7 i++ i++ i {
            if (rate[i] != 0) {
                ansmin++;
                ansmax++;
            }
        } {
            if (rate[i] != 0) {
                ansmin++;
                ansmax++;
            }
        } if (rate[i] != 0) {
                ansmin++;
                ansmax++;
            } rate[i] != 0 rate[i] rate i 0 {
                ansmin++;
                ansmax++;
            } ansmin++ ansmin ansmax++ ansmax if (rate[7] == 0) {
            if (rate[8] != 0) {
                ansmin++;
                ansmax+=rate[8];
            }
        }else{
            ansmin++;
            ansmax++;
            if (rate[8] != 0) {
                ansmax+=(rate[8]);
            }
        } rate[7] == 0 rate[7] rate 7 0 {
            if (rate[8] != 0) {
                ansmin++;
                ansmax+=rate[8];
            }
        } if (rate[8] != 0) {
                ansmin++;
                ansmax+=rate[8];
            } rate[8] != 0 rate[8] rate 8 0 {
                ansmin++;
                ansmax+=rate[8];
            } ansmin++ ansmin ansmax+=rate[8] ansmax rate[8] rate 8 {
            ansmin++;
            ansmax++;
            if (rate[8] != 0) {
                ansmax+=(rate[8]);
            }
        } ansmin++ ansmin ansmax++ ansmax if (rate[8] != 0) {
                ansmax+=(rate[8]);
            } rate[8] != 0 rate[8] rate 8 0 {
                ansmax+=(rate[8]);
            } ansmax+=(rate[8]) ansmax (rate[8]) rate 8 System.out.println(ansmin + " " + ansmax) System.out.println System.out System System.out ansmin + " " + ansmax ansmin + " " + ansmax ansmin " " ansmax sc.close() sc.close sc String[] args args public static void dfs(int placenow) {
        // if went all -> success! 
        // if not went all -> fail...
        
        /*
         dfs
         Go All Place that there is way to and not having been yet. 

         if island 1 is start point, dfs(1);
         if there is way to island 2 and island 3,
         - island 2 changes non-visited -> visited, and dfs(2).
         - island 3 changes non-visited -> visited, and dfs(3).
         

        */

        visit[placenow] = true;
        boolean success = true;
        for (int i = 0; i < n; i++) {
            if (visit[i] == false) { // not go all place
                success = false;
                break;
            }
        }
        if (success) {
            ans++;
            visit[placenow] = false;
            return;
        }

        for (int i = 0; i < m; i++) {
            if (w[i] == placenow && visit[ww[i]] == false ) {
                dfs(ww[i]);
            }else if(ww[i] == placenow && visit[w[i]] == false){
                dfs(w[i]);
            }else{
                continue;
            }
        }
        visit[placenow] = false;
        return;
    } dfs {
        // if went all -> success! 
        // if not went all -> fail...
        
        /*
         dfs
         Go All Place that there is way to and not having been yet. 

         if island 1 is start point, dfs(1);
         if there is way to island 2 and island 3,
         - island 2 changes non-visited -> visited, and dfs(2).
         - island 3 changes non-visited -> visited, and dfs(3).
         

        */

        visit[placenow] = true;
        boolean success = true;
        for (int i = 0; i < n; i++) {
            if (visit[i] == false) { // not go all place
                success = false;
                break;
            }
        }
        if (success) {
            ans++;
            visit[placenow] = false;
            return;
        }

        for (int i = 0; i < m; i++) {
            if (w[i] == placenow && visit[ww[i]] == false ) {
                dfs(ww[i]);
            }else if(ww[i] == placenow && visit[w[i]] == false){
                dfs(w[i]);
            }else{
                continue;
            }
        }
        visit[placenow] = false;
        return;
    } visit[placenow] = true visit[placenow] visit placenow true boolean success = true; success true for (int i = 0; i < n; i++) {
            if (visit[i] == false) { // not go all place
                success = false;
                break;
            }
        } int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
            if (visit[i] == false) { // not go all place
                success = false;
                break;
            }
        } {
            if (visit[i] == false) { // not go all place
                success = false;
                break;
            }
        } if (visit[i] == false) { // not go all place
                success = false;
                break;
            } visit[i] == false visit[i] visit i false { // not go all place
                success = false;
                break;
            } success = false success false break; if (success) {
            ans++;
            visit[placenow] = false;
            return;
        } success {
            ans++;
            visit[placenow] = false;
            return;
        } ans++ ans visit[placenow] = false visit[placenow] visit placenow false return; for (int i = 0; i < m; i++) {
            if (w[i] == placenow && visit[ww[i]] == false ) {
                dfs(ww[i]);
            }else if(ww[i] == placenow && visit[w[i]] == false){
                dfs(w[i]);
            }else{
                continue;
            }
        } int i = 0; int i = 0; i 0 i < m i m i++ i++ i {
            if (w[i] == placenow && visit[ww[i]] == false ) {
                dfs(ww[i]);
            }else if(ww[i] == placenow && visit[w[i]] == false){
                dfs(w[i]);
            }else{
                continue;
            }
        } {
            if (w[i] == placenow && visit[ww[i]] == false ) {
                dfs(ww[i]);
            }else if(ww[i] == placenow && visit[w[i]] == false){
                dfs(w[i]);
            }else{
                continue;
            }
        } if (w[i] == placenow && visit[ww[i]] == false ) {
                dfs(ww[i]);
            }else if(ww[i] == placenow && visit[w[i]] == false){
                dfs(w[i]);
            }else{
                continue;
            } w[i] == placenow && visit[ww[i]] == false w[i] == placenow w[i] w i placenow visit[ww[i]] == false visit[ww[i]] visit ww[i] ww i false {
                dfs(ww[i]);
            } dfs(ww[i]) dfs ww[i] ww i if(ww[i] == placenow && visit[w[i]] == false){
                dfs(w[i]);
            }else{
                continue;
            } ww[i] == placenow && visit[w[i]] == false ww[i] == placenow ww[i] ww i placenow visit[w[i]] == false visit[w[i]] visit w[i] w i false {
                dfs(w[i]);
            } dfs(w[i]) dfs w[i] w i {
                continue;
            } continue; visit[placenow] = false visit[placenow] visit placenow false return; int placenow placenow
/*
* @Author Silviase(@silviasetitech)
* For ProCon
*/

import java.util.*;
import java.lang.*;
import java.math.*;

class Main{

    static int n;
    static int m;
    static int ans;
    static int[] rate;
    static int var;
    static int ansmin;
    static int ansmax;
    static int[] w;
    static int[] ww;
    static boolean[] visit;
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        n = sc.nextInt();
        ansmin = 0;
        ansmax = 0;
        rate = new int[9];
        for (int i = 0; i < n; i++) {
            int tmp = sc.nextInt();
            if (tmp >= 3200) {
                tmp = 3200;
            }
            rate[tmp/400]++;
        }
        for (int i = 0; i < 7; i++) {
            if (rate[i] != 0) {
                ansmin++;
                ansmax++;
            }
        }
        if (rate[7] == 0) {
            if (rate[8] != 0) {
                ansmin++;
                ansmax+=rate[8];
            }
        }else{
            ansmin++;
            ansmax++;
            if (rate[8] != 0) {
                ansmax+=(rate[8]);
            }
        }

        System.out.println(ansmin + " " + ansmax);

        sc.close();
    }

    public static void dfs(int placenow) {
        // if went all -> success! 
        // if not went all -> fail...
        
        /*
         dfs
         Go All Place that there is way to and not having been yet. 

         if island 1 is start point, dfs(1);
         if there is way to island 2 and island 3,
         - island 2 changes non-visited -> visited, and dfs(2).
         - island 3 changes non-visited -> visited, and dfs(3).
         

        */

        visit[placenow] = true;
        boolean success = true;
        for (int i = 0; i < n; i++) {
            if (visit[i] == false) { // not go all place
                success = false;
                break;
            }
        }
        if (success) {
            ans++;
            visit[placenow] = false;
            return;
        }

        for (int i = 0; i < m; i++) {
            if (w[i] == placenow && visit[ww[i]] == false ) {
                dfs(ww[i]);
            }else if(ww[i] == placenow && visit[w[i]] == false){
                dfs(w[i]);
            }else{
                continue;
            }
        }
        visit[placenow] = false;
        return;
    }

}

