#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
const bool test = false;
long long dx[] = {1, 0, -1, 0};
long long dy[] = {0, 1, 0, -1};
const long long INF = (long long)1 << 60;
const ll INFL = (ll)1 << 60;
ll mod_n = (long long)1e9 + 7;
const double eps = 1e-10;
long long sgn(const long double &r) { return (r > eps) - (r < -eps); }
long long sgn(const long double &a, const long double &b) { return sgn(a - b); }
const long long MAX = (long long)2e5 + 5;
vector<string> split(const string &str, char sep) {
  vector<string> v;
  stringstream ss(str);
  string buffer;
  while (getline(ss, buffer, sep)) {
    v.push_back(buffer);
  }
  return v;
}
template <class InputIterator>
long long sum(InputIterator begin, InputIterator end) {
  return accumulate(begin, end, 0ll);
}
void solve();
class Solver {
 public:
  long long n;
  long long a[105];
  long long exists[20] = {};
  void solve() {
    cin >> n;
    for (long long i = 0; i < (n); ++i) cin >> a[i];
    for (long long i = 0; i < (n); ++i) {
      exists[a[i] / 400]++;
    }
    long long res = 0;
    for (long long i = 0; i < (3200 / 400); ++i) {
      res += (exists[i] ? 1 : 0);
    }
    long long res1 = res;
    long long res2 = res;
    for (long long i = (3200 / 400); i < (5600 / 400); ++i) {
      res2 += exists[i];
    }
    cout << res1 << " " << res2 << endl;
  }
};
signed main() {
  cout << fixed << setprecision(20);
  auto ptr = new Solver();
  ptr->solve();
  delete ptr;
  while (true) {
    auto ptr = new Solver();
    ptr->solve();
    delete ptr;
  }
  return 0;
}
