#include <bits/stdc++.h>
using namespace std;
using INT = long long;
using UINT = unsigned long long;
unsigned gcd(unsigned a, unsigned b) {
  while (1) {
    if (a < b) swap(a, b);
    if (!b) break;
    a %= b;
  }
  return a;
}
const UINT mod = 1000000007;
UINT PowMod(UINT x, UINT y) {
  if (y == 0) {
    return 1;
  } else if (y == 1) {
    return x % mod;
  } else if (y % 2 == 0) {
    auto tmp = PowMod(x, y / 2);
    return tmp * tmp % mod;
  } else {
    auto tmp = PowMod(x, y / 2);
    return (tmp * tmp % mod) * x % mod;
  }
}
UINT getModInv(UINT N) { return PowMod(N, mod - 2); }
struct uf {
  vector<INT> p;
  uf(INT n) : p(n) {
    for (size_t i = 0; i < n; i++) {
      p[i] = i;
    }
  }
  INT rt(INT n) { return p[n] == n ? n : p[n] = rt(p[n]); }
  void un(INT n, INT m) { p[rt(n)] = p[rt(m)]; }
  bool eq(INT n, INT m) { return rt(n) == rt(m); }
};
int main() {
  INT n;
  cin >> n;
  vector<INT> a(n), c(8, 0);
  INT free = 0, t = 0;
  for (size_t i = 0; i < n; i++) {
    cin >> a[i];
    if (a[i] / 400 >= 8) {
      free++;
    } else {
      c[a[i] / 400]++;
    }
  }
  for (size_t i = 0; i < 8; i++) {
    if (c[i] > 0) {
      t++;
    }
  }
  if (t == 0) {
    cout << "1 " << min(free, 8LL) << endl;
    return 0;
  } else {
    cout << t << " " << min(t + free, 8LL) << endl;
  }
  return 0;
}
