#include <bits/stdc++.h>
using namespace std;
template <class T>
int size(const T& value) {
  return value.size();
}
template <class T>
std::ostream& PrintContainer(std::ostream& stream, const T& container) {
  for (auto el : container) stream << el << " ";
  return stream;
}
template <class T>
std::ostream& operator<<(std::ostream& stream, const set<T>& s) {
  return PrintContainer(stream, s);
}
template <class T>
std::ostream& operator<<(std::ostream& stream, const unordered_set<T>& s) {
  return PrintContainer(stream, s);
}
template <class T>
std::ostream& operator<<(std::ostream& stream, const vector<T>& v) {
  return PrintContainer(stream, v);
}
template <class T, class V>
std::ostream& operator<<(std::ostream& stream, const map<T, V>& m) {
  return PrintContainer(stream, m);
}
template <class T, class V>
std::ostream& operator<<(std::ostream& stream, const unordered_map<T, V>& m) {
  return PrintContainer(stream, m);
}
template <class T, class V>
std::ostream& operator<<(std::ostream& stream, const pair<T, V>& p) {
  stream << p.first << "," << p.second << " ";
  return stream;
}
template <class T>
std::ostream& operator<<(std::ostream& stream, const vector<vector<T>>& v) {
  for (auto line : v) {
    for (auto el : line) stream << el << " ";
    stream << "\n";
  }
  return stream;
}
vector<string> debug_split(const string& s, char c) {
  vector<string> v;
  stringstream ss(s);
  string x;
  while (getline(ss, x, c)) v.emplace_back(x);
  return move(v);
}
void debug_err() { cerr << "\n"; }
template <typename T, typename... Args>
void debug_err(vector<string>::iterator it, T a, Args... args) {
  cerr << it->substr((*it)[0] == ' ', it->length()) << " = " << a << " | ";
  debug_err(++it, args...);
}
class Debugger {
 public:
  template <class T>
  void Output(const T& v) {
    cerr << v << " ";
  }
  template <class T>
  Debugger& operator,(const T& v) {
    Output(v);
    return *this;
  }
} dbg;
template <typename U, typename V>
void remin(U& A, V B) {
  if (A > B) A = B;
}
template <typename U, typename V>
void remax(U& A, V B) {
  if (A < B) A = B;
}
int main() {
  int N;
  cin >> N;
  vector<int> rating(N);
  for (int i(0), _NN(N); (i) < (_NN); ++(i)) cin >> rating[i];
  vector<char> colors(9);
  for (int i(0), _NN(N); (i) < (_NN); ++(i)) {
    for (int j(1), _YY(8); (j) <= (_YY); ++(j)) {
      if (rating[i] >= 400 * (j - 1) + 1 && rating[i] < 400 * j) {
        colors[j - 1]++;
        break;
      }
    }
    if (rating[i] >= 3200) {
      colors[8]++;
    }
  }
  int missing = 0;
  for (int j(0), _NN(8); (j) < (_NN); ++(j)) {
    missing += !colors[j];
  }
  int min_colors = 8 - missing;
  missing = max(0, missing - colors[8]);
  int max_colors = 8 - missing;
  cout << min_colors << " " << max_colors << "\n";
  return 0;
}
