#include <bits/stdc++.h>
using namespace std;
struct UnionFind {
  vector<int> data;
  UnionFind(int size) : data(size, -1) {}
  void unionSet(int x, int y) {
    x = root(x), y = root(y);
    if (x != y) {
      if (data[y] < data[x]) swap(x, y);
      data[x] += data[y];
      data[y] = x;
    }
  }
  bool findSet(int x, int y) { return root(x) == root(y); }
  int root(int x) { return data[x] < 0 ? x : data[x] = root(data[x]); }
  int size(int x) { return -data[root(x)]; }
};
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long digitsum(long long a) {
  int sum = 0;
  while (a) {
    sum += a % 10;
    a /= 10;
  }
  return sum;
}
int getdigit(long long a) { return to_string(a).size(); }
int countpow(long long a, long long b) {
  int ans = 0;
  if (b == 0) return -1;
  while (1) {
    if (a % b == 0) {
      a /= b;
      ans++;
    } else
      break;
  }
  return ans;
}
int to_num(char c) {
  if (c >= '0' && c <= '9')
    return (c - '0');
  else
    return -1;
}
struct edge {
  long long to, cost;
};
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  int n;
  cin >> n;
  int color[8] = {};
  int tourist = 0;
  for (long long i = 0; i < n; i++) {
    int a;
    cin >> a;
    int tmp = 0;
    if (a >= 3200)
      tourist++;
    else {
      for (long long i = 0; i < 8; i++) {
        tmp += 400;
        if (tmp > a) {
          color[i]++;
          break;
        }
      }
    }
  }
  if (tourist == n) {
    cout << 1 << ' ' << min(8, n) << endl;
    return 0;
  }
  int Min = 0;
  for (long long i = 0; i < 8; i++) {
    if (color[i]) Min++;
  }
  cout << Min << ' ' << min(Min + tourist, 8);
}
