#include <iostream>
#include <vector>
#include <algorithm>

int main( void ) {
    int N;
    std::cin >> N;

    // ただし便宜的に色が9色あることにする。
    // 最後の色は、実は色ではなくて、「好きな色を使える」ことなので注意。
    std::vector<bool> color_used = std::vector<bool>(8, false);  // 8色あって、初期値はfalseです。と言う指定

    // 自由な色を使って良いメンバーが何人いるか
    // 基本的に、みんな自由な色を使えることにしてしまう。
    // しかし、「使わなきゃいけない色」が見つかったら、ここから減らす。
    int free_color_members = N;

    // 入力しながら色を振り分けていく
    for( size_t i = 0; i < N; ++i ) {
        int rate;
        std::cin >> rate;

        // 上のテーブルを使って各メンバーを色に振り分けていきます。
        // もちろん配列を使わずにif文で地道に振り分けてもOKです。(大変ですけどね!)
        for( size_t j = 0; j < color_ranges.size() - 1; ++j ) {
            // よくみるとレートの変化するところは400区切りだから、400で割って割り振ってもOK
            
            if( rate < 3200 ) {
                color_used[ rate / 400 ] = true;
                free_color_members -= 1;
                break;
            }
        }
    }

    // 何種類の色が、決め打ちで使用済みなのか調べる
    int used_colors = 0;
    for( size_t i = 0; i < 8; ++i ) {
        if( color_used[ i ] > 0 ) {
            used_colors += 1;
        }
    }

    // 少なくとも一人のユーザがこの問題ではいることを考えると
    // 「決め打ちの色が1つもない」のであれば
    // 「自由な色の人が何か1つ決め打ちの色をとる」ようになるということ
    // なので自由な色を使える人の数を1つ減らして、used_colorを1にすることで問題を帰着できる。
    if( used_color == 0 ) {
        free_color_members -= 1;
        used_color = 1;
    }

    std::cout << used_color << " " << free_color_members << std::endl;

    return 0;
}