//#include <bits/stdc++.h>
//#include <stdio.h>
#include<iostream>
#include<cstdio>
#include<bitset>
#include<algorithm>
#include<vector>
#include<list>
#include<queue>
#include<stack>
//#include <bits/stdc++.h>
#include<string>
#include<string.h>
#include<cmath>
#include<utility>
#include<functional>
#include<map>
#include<set>
#include<cctype>
#include<fstream>
#include <numeric>
#include <iomanip>
#include <cstring> 
using namespace std;
using ll=long long;

#define FOR(i, a, b) for( int i=(a);i<=(b);i++)
#define RFOR(i, a, b) for( int i=(a);i>=(b);i--)
#define LFOR(i, a, b) for( long long int i=(a);i<=(b);i++)
#define LRFOR(i, a, b) for(long long int i=(a);i>=(b);i--)
#define MOD 1000000007


#include <iostream>
#include <cmath>
using namespace std;
 

 
bool isPrimeNum( ll x ){ // 素数である場合 true を返す
  if( x <= 1 ){ // 1以下である場合は素数でないことがすぐにわかる
    return false;
  }
  // sqrt( double型 ) は引数の平方根を double型で返すので、int型でキャスト
  int n = (int)sqrt( (double)x );
  for( int i = 2; i <= n; i++ ){
    if( x % i == 0 ){ // 割り切る整数がある場合、即判定終了
      return false;
    }
  }
  return true; // 割り切る整数がない場合、素数である
}

constexpr ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
constexpr ll lcm(int a,int b){return a*b/gcd(a,b);}
constexpr ll abs(ll a,ll b){
if(a>=b)return a-b;
if(a<b)return b-a;
}
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
 

 
int main() {
    ll N,K;
    cin >> N;
    ll a[N];
    ll ans=0;
    ll sum=0;
    FOR(i,0,N-1){
      cin>>a[i];
    }
    ll c1=0;
    ll c2=0;
    ll c3=0;
    ll c4=0;
    ll c5=0;
    ll c6=0;
    ll c7=0;
    ll c8=0;
    ll c9=0;
    FOR(i,0,N-1){
      if(a[i]<400){
        c1=1;
      }else if(a[i]<=800){
        c2=1;
      }else if(a[i]<=1200){
        c3=1;
      }else if(a[i]<=1600){
        c4=1;
      }else if(a[i]<=2000){
        c5=1;
      }else if(a[i]<=2400){
        c6=1;
      }else if(a[i]<=2800){
        c7=1;
      }else if(a[i]<=3200){
        c9=1;
      }else{
        c8++;
      }
    }



    ans=c1+c2+c3+c4+c5+c6+c7+c8+c9S;



  cout<<ans<<endl;

  return 0;
}



