#include <bits/stdc++.h>
using namespace std;
const long double PI = 3.141592653589793238463;
const int N = 5e5 + 10;
const long long INF = 1LL << 60;
template <class T>
void chmax(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
void chmin(T &a, T b) {
  if (a > b) a = b;
}
vector<int> g[N];
bool viss[N];
int vis[N];
void dfs(int curr, int par) {
  for (auto x : g[curr])
    if (x != par) dfs(x, curr);
}
void dfs1(int curr, int par) {
  viss[curr] = 1;
  for (auto x : g[curr])
    if (!viss[x]) dfs1(x, curr);
}
void dfs2(int curr, int par, int num) {
  vis[curr] = num;
  for (auto x : g[curr])
    if (vis[x] == 0) dfs2(x, curr, num);
}
long long fxor(long long n) {
  if (n < 0) return 0;
  if (n % 4 == 3)
    return 0;
  else if (n % 4 == 0)
    return n;
  else if (n % 4 == 1)
    return n ^ (n - 1);
  else if (n % 4 == 2)
    return n ^ (n - 1) ^ (n - 2);
}
unsigned long long int ppow(unsigned long long int x,
                            unsigned long long int y) {
  unsigned long long int res = 1;
  while (y > 0) {
    if (y & 1) res = (res * x) % 1000000007;
    y = y >> 1;
    x = (x * x) % 1000000007;
  }
  return res;
}
unsigned long long int factdp[N];
unsigned long long int fact(unsigned long long int x) {
  if (x == 0) return 1;
  if (x == 1) return 1;
  if (factdp[x] != -1) return factdp[x];
  return factdp[x] = (x * fact(x - 1)) % 1000000007;
}
string ansConv = "";
void convert10tob(unsigned long long int N, int b) {
  if (N == 0) return;
  int x = N % b;
  N /= b;
  if (x < 0) N += 1;
  convert10tob(N, b);
  ansConv += to_string(x);
  return;
}
unsigned long long int convertstrtob(string a, int b) {
  unsigned long long int aa = 0;
  unsigned long long int mul = 1;
  for (int i = a.length() - 1; i >= 0; i--) {
    int curr = a[i] - '0';
    aa += (curr * mul);
    mul *= b;
  }
  return aa;
}
int findpar(int curr, int arr[]) {
  while (arr[curr] != curr) curr = arr[curr];
  return curr;
}
void Union(int b, int spa, int arr[]) {
  while (arr[b] != b) {
    int c = arr[b];
    arr[b] = spa;
    b = c;
  }
  arr[b] = spa;
}
bool gray, bro, green, cyn, blue, yellow, orange, red;
int main() {
  int n;
  cin >> n;
  int minn = 0;
  int maxx = 0;
  bool first = false;
  int arr[n];
  for (int i = 0; i < n; i++) cin >> arr[i];
  sort(arr, arr + n);
  for (int i = 0; i < n; i++) {
    int a = arr[i];
    if (a < 400 && gray == 0) {
      minn++;
      maxx++;
      gray = 1;
      first = true;
    } else if (a >= 400 && a < 800 && bro == 0) {
      minn++;
      maxx++;
      bro = 1;
      first = true;
    } else if (a >= 800 && a < 1200 && green == 0) {
      minn++;
      maxx++;
      green = 1;
      first = true;
    } else if (a >= 1200 && a < 1600 && cyn == 0) {
      minn++;
      maxx++;
      cyn = 1;
      first = true;
    } else if (a >= 1600 && a < 2000 && blue == 0) {
      minn++;
      maxx++;
      blue = 1;
      first = true;
    } else if (a >= 2000 && a < 2400 && yellow == 0) {
      minn++;
      maxx++;
      yellow = 1;
      first = true;
    } else if (a >= 2400 && a < 2800 && orange == 0) {
      minn++;
      maxx++;
      orange = 1;
      first = true;
    } else if (a >= 2800 && a < 3200 && red == 0) {
      minn++;
      maxx++;
      red = 1;
      first = true;
    } else if (a >= 3200) {
      if (first == false) minn++;
      maxx++;
    }
  }
  cout << minn << " " << maxx << endl;
  return 0;
}
