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

int main( void ) {
    std::vector<int> a;
    for( size_t i = 0; i < N; ++i ) {
        int rate;
        std::cin >> rate;
        a.push_back( rate );
    }

    // 色が変わるところを示すテーブル
    // i番目のレート以上、i+1番目のレート以下で、i番の色
    // ただし3200を超えたら、好きな色をつけることができます。
    // 問題の要請では、レートの値は4800点が最大のレートなので、
    // その時も問題なく検索できるように、最後には4801を置いておきます。
    const std::vector<int> color_table = { 1, 400, 800, 1200, 1600, 2000, 2400, 2800, 3200, 4801 };

    // 便宜的に色が9色あることにする。
    // ただし最後の人は好きな色を使えるので注意。
    int color_count[ 9 ] = { 0 };

    // 上のテーブルを使って各メンバーを色に振り分けていきます。
    for( size_t i = 0; i < N; ++i ) {
        const rate = a[i];
        for( size_t j = 0; j < rate_table.size() - 1; ++j ) {
            const int min = rate_table[ j ];
            const int max = rate_table[ j + 1 ];

            if( min <= rate && rate < max ) {
                color = j;
                break;
            }
        }
        // 指定の色を持った人を1人増やす
        color_count[ color ] += 1;
    }

    // 決め打ちの色になってる人がいるなら、その個数をみる
    int constant_color_count = 0;
    for( size_t i = 0; i < 8; ++i ) {
        if( color_count [ i ] > 0 ) {
            constant_color_count += 1;
        }
    }

    if( constant_color_count == 0 && color_count[ 8 ] == 0 ) {
        std::cout << 0 << " " << 0 << std::endl;
    } else if ( constant_color_count == 0 && color_count[ 8 ] != 0 ) {
        std::cout << 1 << " " << color_count[ 8 ] << std::endl;
    } else if ( constant_color_count != 0 && color_count[ 8 ] == 0 ) {
        std::cout << constant_color_count << " " << constant_color_count << std::endl;
    } else if ( constant_color_count != 0 && color_count[ 8 ] != 0 ) {
        std::cout << constant_color_count << " " << constant_color_count + color_count[ 8 ] << std::endl;
    }

    return 0;
}