#include <bits/stdc++.h>
using namespace std;
long long mod(long long a, long long b) { return (a % b + b) % b; }
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long lcm(long long a, long long b) { return a * b / gcd(a, b); }
void Yes() { cout << "Yes" << endl; }
void No() { cout << "No" << endl; }
void Judge(bool b) { b ? Yes() : No(); }
void YES() { cout << "YES" << endl; }
void NO() { cout << "NO" << endl; }
void JUDGE(bool b) { b ? YES() : NO(); }
long long powMod(long long a, long long b, long long c) {
  long long ans = 1;
  for (int i = 0; i < (b); ++i) {
    ans = ans * a % c;
  }
  return ans;
}
template <typename T>
void ppp(T n) {
  cout << n << endl;
}
template <typename T>
void dpp(T n) {
  cerr << n << endl;
}
template <typename T>
void vpp(T a) {
  for (int i = 0; i < (a.size()); ++i) {
    cout << a[i] << endl;
  }
}
template <typename T>
void vdp(T a) {
  for (int i = 0; i < (a.size()); ++i) {
    cerr << a[i] << endl;
  }
}
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
const int ddx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
const int ddy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
template <typename T>
std::string to_string(const T& n) {
  std::ostringstream stm;
  stm << n;
  return stm.str();
}
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;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  int a;
  int col[8] = {0};
  int any = 0;
  for (int i = 0; i < (n); ++i) {
    cin >> a;
    if (a >= 3200) {
      any++;
      continue;
    }
    col[a / 400]++;
  }
  for (int i = 0; i < (8); ++i) {
    dpp(col[i]);
  }
  int col_cnt = 0;
  for (int i = 0; i < (8); ++i) {
    if (col[i] != 0) col_cnt++;
  }
  cout << col_cnt << ' ' << min(8, col_cnt + any) << endl;
  return 0;
}
