use std::vec::Vec;
use std::cmp::*;

fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>().split_whitespace().map(|e| e.parse().ok().unwrap()).collect()
}

fn main() {
    let n: usize = read();
    let a: Vec<usize> = read_vec();
    let mut rate = vec![0; 9];

    for i in 0..n {
      if 1 <= a[i] && a[i] <= 399 {
        rate[0] += 1;
      }
      else if 400 <= a[i] && a[i] <= 799 {
        rate[1] += 1;
      }
      else if 800 <=  a[i] && a[i] <= 1199 {
        rate[2] += 1;
      }
      else if 1200 <= a[i] && a[i] <= 1599 {
        rate[3] += 1;
      }
      else if 1600  <= a[i] && a[i] <= 1999 {
        rate[4] += 1;
      }
      else if 2000 <= a[i] && a[i] <= 2399 {
        rate[5] += 1;
      }
      else if 2400 <= a[i] && a[i] <= 2799 {
        rate[6] += 1;
      }
      else if 2800 <= a[i] {
        rate[7] += 1;
      }
      if 3200 <= a[i] {
        rate[8] += 1;
      }
    }

    let mut count = 0;
    for i in 0..8 {
      if rate[i] > 0 {
        count += 1;
      }
    }


    let M
      = if rate[8] > 0 && rate[7] == rate[8] {
          min(8, count + rate[8] - 1)
        } else if rate[8] > 0 && rate[7] > rate[8] {
          min(8, count + rate[8])
        } else {
          count
        };
    let m = if rate[8] > 0 && rate[7] == rate[8] { max(1, count - 1) } else { count };

    println!("{} {}", m, M);
}
