import java.io.*;
import java.util.StringTokenizer;
import static java.lang.Math.*;

public class Main {
  public static void main(String[] args) {
    new Main().solve();
  }

  private void solve() {
    try(InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out)) {

      int n = in.nextInt();
      int[] a = in.mapInt(n);

      int[] colors = new int[9];
      for (int rate : a) {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      }

      int count = 0;
      for (int i = 0; i < 8; i++) {
        count += colors[i] > 0 ? 1 : 0;
      }

      int max = count + colors[8];
      int min = count != 0 ? count : 1;
      out.println(min + " " + max);
    }
    catch(IOException e) {
      System.err.println(e);
    }
  }

  int atoi(String s) { return Integer.parseInt(s); }
  long atol(String s) { return Long.parseLong(s); }

  static class InputReader implements AutoCloseable {
    public BufferedReader br;
    public StringTokenizer st;

    public InputReader(InputStream stream) {
      br = new BufferedReader(new InputStreamReader(stream), 32768);
      st = null;
    }

    public String nextLine() throws IOException {
      return br.readLine();
    }
    public String next() {
      if (st == null || !st.hasMoreTokens()) {
        try { st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        }
      }
      return st.nextToken();
    }
    public int nextInt() { return Integer.parseInt(next()); }
    public long nextLong() { return Long.parseLong(next()); }
    int[] mapInt(int len) {
      int[] ret = new int[len];
      for (int i = 0; i < len; i++) ret[i] = Integer.parseInt(next());
      return ret;
    }
    long[] mapLong(int len) {
      long[] ret = new long[len];
      for (int i = 0; i < len; i++) ret[i] = Long.parseLong(next());
      return ret;
    }
    @Override public void close() throws IOException { br.close(); }
  }
} import java.io.*; io.* java import java.util.StringTokenizer; StringTokenizer java.util import static java.lang.Math.*; import static java.lang.Math.*; import static java.lang.Math.*; public class Main {
  public static void main(String[] args) {
    new Main().solve();
  }

  private void solve() {
    try(InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out)) {

      int n = in.nextInt();
      int[] a = in.mapInt(n);

      int[] colors = new int[9];
      for (int rate : a) {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      }

      int count = 0;
      for (int i = 0; i < 8; i++) {
        count += colors[i] > 0 ? 1 : 0;
      }

      int max = count + colors[8];
      int min = count != 0 ? count : 1;
      out.println(min + " " + max);
    }
    catch(IOException e) {
      System.err.println(e);
    }
  }

  int atoi(String s) { return Integer.parseInt(s); }
  long atol(String s) { return Long.parseLong(s); }

  static class InputReader implements AutoCloseable {
    public BufferedReader br;
    public StringTokenizer st;

    public InputReader(InputStream stream) {
      br = new BufferedReader(new InputStreamReader(stream), 32768);
      st = null;
    }

    public String nextLine() throws IOException {
      return br.readLine();
    }
    public String next() {
      if (st == null || !st.hasMoreTokens()) {
        try { st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        }
      }
      return st.nextToken();
    }
    public int nextInt() { return Integer.parseInt(next()); }
    public long nextLong() { return Long.parseLong(next()); }
    int[] mapInt(int len) {
      int[] ret = new int[len];
      for (int i = 0; i < len; i++) ret[i] = Integer.parseInt(next());
      return ret;
    }
    long[] mapLong(int len) {
      long[] ret = new long[len];
      for (int i = 0; i < len; i++) ret[i] = Long.parseLong(next());
      return ret;
    }
    @Override public void close() throws IOException { br.close(); }
  }
} Main public static void main(String[] args) {
    new Main().solve();
  } main {
    new Main().solve();
  } new Main().solve() new Main().solve new Main() String[] args args private void solve() {
    try(InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out)) {

      int n = in.nextInt();
      int[] a = in.mapInt(n);

      int[] colors = new int[9];
      for (int rate : a) {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      }

      int count = 0;
      for (int i = 0; i < 8; i++) {
        count += colors[i] > 0 ? 1 : 0;
      }

      int max = count + colors[8];
      int min = count != 0 ? count : 1;
      out.println(min + " " + max);
    }
    catch(IOException e) {
      System.err.println(e);
    }
  } solve {
    try(InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out)) {

      int n = in.nextInt();
      int[] a = in.mapInt(n);

      int[] colors = new int[9];
      for (int rate : a) {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      }

      int count = 0;
      for (int i = 0; i < 8; i++) {
        count += colors[i] > 0 ? 1 : 0;
      }

      int max = count + colors[8];
      int min = count != 0 ? count : 1;
      out.println(min + " " + max);
    }
    catch(IOException e) {
      System.err.println(e);
    }
  } try(InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out)) {

      int n = in.nextInt();
      int[] a = in.mapInt(n);

      int[] colors = new int[9];
      for (int rate : a) {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      }

      int count = 0;
      for (int i = 0; i < 8; i++) {
        count += colors[i] > 0 ? 1 : 0;
      }

      int max = count + colors[8];
      int min = count != 0 ? count : 1;
      out.println(min + " " + max);
    }
    catch(IOException e) {
      System.err.println(e);
    } catch(IOException e) {
      System.err.println(e);
    } IOException e {
      System.err.println(e);
    } System.err.println(e) System.err.println System.err System System.err e {

      int n = in.nextInt();
      int[] a = in.mapInt(n);

      int[] colors = new int[9];
      for (int rate : a) {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      }

      int count = 0;
      for (int i = 0; i < 8; i++) {
        count += colors[i] > 0 ? 1 : 0;
      }

      int max = count + colors[8];
      int min = count != 0 ? count : 1;
      out.println(min + " " + max);
    } InputReader in = new InputReader(System.in) InputReader in = new InputReader(System.in) new InputReader(System.in) PrintWriter out = new PrintWriter(System.out) PrintWriter out = new PrintWriter(System.out) new PrintWriter(System.out) int n = in.nextInt(); n in.nextInt() in.nextInt in int[] a = in.mapInt(n); a in.mapInt(n) in.mapInt in n int[] colors = new int[9]; colors new int[9] 9 for (int rate : a) {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      } int rate a {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      } {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      } int rank = rate >= 3200 ? 8 : rate / 400; rank rate >= 3200 ? 8 : rate / 400 rate >= 3200 rate 3200 8 rate / 400 rate 400 colors[rank]++ colors[rank] colors rank int count = 0; count 0 for (int i = 0; i < 8; i++) {
        count += colors[i] > 0 ? 1 : 0;
      } int i = 0; int i = 0; i 0 i < 8 i 8 i++ i++ i {
        count += colors[i] > 0 ? 1 : 0;
      } {
        count += colors[i] > 0 ? 1 : 0;
      } count += colors[i] > 0 ? 1 : 0 count colors[i] > 0 ? 1 : 0 colors[i] > 0 colors[i] colors i 0 1 0 int max = count + colors[8]; max count + colors[8] count colors[8] colors 8 int min = count != 0 ? count : 1; min count != 0 ? count : 1 count != 0 count 0 count 1 out.println(min + " " + max) out.println out min + " " + max min + " " + max min " " max int atoi(String s) { return Integer.parseInt(s); } atoi { return Integer.parseInt(s); } return Integer.parseInt(s); Integer.parseInt(s) Integer.parseInt Integer s String s s long atol(String s) { return Long.parseLong(s); } atol { return Long.parseLong(s); } return Long.parseLong(s); Long.parseLong(s) Long.parseLong Long s String s s static class InputReader implements AutoCloseable {
    public BufferedReader br;
    public StringTokenizer st;

    public InputReader(InputStream stream) {
      br = new BufferedReader(new InputStreamReader(stream), 32768);
      st = null;
    }

    public String nextLine() throws IOException {
      return br.readLine();
    }
    public String next() {
      if (st == null || !st.hasMoreTokens()) {
        try { st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        }
      }
      return st.nextToken();
    }
    public int nextInt() { return Integer.parseInt(next()); }
    public long nextLong() { return Long.parseLong(next()); }
    int[] mapInt(int len) {
      int[] ret = new int[len];
      for (int i = 0; i < len; i++) ret[i] = Integer.parseInt(next());
      return ret;
    }
    long[] mapLong(int len) {
      long[] ret = new long[len];
      for (int i = 0; i < len; i++) ret[i] = Long.parseLong(next());
      return ret;
    }
    @Override public void close() throws IOException { br.close(); }
  } InputReader public BufferedReader br; br public StringTokenizer st; st public InputReader(InputStream stream) {
      br = new BufferedReader(new InputStreamReader(stream), 32768);
      st = null;
    } InputReader {
      br = new BufferedReader(new InputStreamReader(stream), 32768);
      st = null;
    } br = new BufferedReader(new InputStreamReader(stream), 32768) br new BufferedReader(new InputStreamReader(stream), 32768) st = null st null InputStream stream stream public String nextLine() throws IOException {
      return br.readLine();
    } nextLine {
      return br.readLine();
    } return br.readLine(); br.readLine() br.readLine br public String next() {
      if (st == null || !st.hasMoreTokens()) {
        try { st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        }
      }
      return st.nextToken();
    } next {
      if (st == null || !st.hasMoreTokens()) {
        try { st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        }
      }
      return st.nextToken();
    } if (st == null || !st.hasMoreTokens()) {
        try { st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        }
      } st == null || !st.hasMoreTokens() st == null st null !st.hasMoreTokens() st.hasMoreTokens() st.hasMoreTokens st {
        try { st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        }
      } try { st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        } IOException e {
          throw new UncheckedIOException(e);
        } throw new UncheckedIOException(e); new UncheckedIOException(e) { st = new StringTokenizer(br.readLine());
        } st = new StringTokenizer(br.readLine()) st new StringTokenizer(br.readLine()) return st.nextToken(); st.nextToken() st.nextToken st public int nextInt() { return Integer.parseInt(next()); } nextInt { return Integer.parseInt(next()); } return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next public long nextLong() { return Long.parseLong(next()); } nextLong { return Long.parseLong(next()); } return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next int[] mapInt(int len) {
      int[] ret = new int[len];
      for (int i = 0; i < len; i++) ret[i] = Integer.parseInt(next());
      return ret;
    } mapInt {
      int[] ret = new int[len];
      for (int i = 0; i < len; i++) ret[i] = Integer.parseInt(next());
      return ret;
    } int[] ret = new int[len]; ret new int[len] len for (int i = 0; i < len; i++) ret[i] = Integer.parseInt(next()); int i = 0; int i = 0; i 0 i < len i len i++ i++ i ret[i] = Integer.parseInt(next()); ret[i] = Integer.parseInt(next()) ret[i] ret i Integer.parseInt(next()) Integer.parseInt Integer next() next return ret; ret int len len long[] mapLong(int len) {
      long[] ret = new long[len];
      for (int i = 0; i < len; i++) ret[i] = Long.parseLong(next());
      return ret;
    } mapLong {
      long[] ret = new long[len];
      for (int i = 0; i < len; i++) ret[i] = Long.parseLong(next());
      return ret;
    } long[] ret = new long[len]; ret new long[len] len for (int i = 0; i < len; i++) ret[i] = Long.parseLong(next()); int i = 0; int i = 0; i 0 i < len i len i++ i++ i ret[i] = Long.parseLong(next()); ret[i] = Long.parseLong(next()) ret[i] ret i Long.parseLong(next()) Long.parseLong Long next() next return ret; ret int len len @Override public void close() throws IOException { br.close(); } close { br.close(); } br.close() br.close br AutoCloseable public class Main {
  public static void main(String[] args) {
    new Main().solve();
  }

  private void solve() {
    try(InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out)) {

      int n = in.nextInt();
      int[] a = in.mapInt(n);

      int[] colors = new int[9];
      for (int rate : a) {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      }

      int count = 0;
      for (int i = 0; i < 8; i++) {
        count += colors[i] > 0 ? 1 : 0;
      }

      int max = count + colors[8];
      int min = count != 0 ? count : 1;
      out.println(min + " " + max);
    }
    catch(IOException e) {
      System.err.println(e);
    }
  }

  int atoi(String s) { return Integer.parseInt(s); }
  long atol(String s) { return Long.parseLong(s); }

  static class InputReader implements AutoCloseable {
    public BufferedReader br;
    public StringTokenizer st;

    public InputReader(InputStream stream) {
      br = new BufferedReader(new InputStreamReader(stream), 32768);
      st = null;
    }

    public String nextLine() throws IOException {
      return br.readLine();
    }
    public String next() {
      if (st == null || !st.hasMoreTokens()) {
        try { st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        }
      }
      return st.nextToken();
    }
    public int nextInt() { return Integer.parseInt(next()); }
    public long nextLong() { return Long.parseLong(next()); }
    int[] mapInt(int len) {
      int[] ret = new int[len];
      for (int i = 0; i < len; i++) ret[i] = Integer.parseInt(next());
      return ret;
    }
    long[] mapLong(int len) {
      long[] ret = new long[len];
      for (int i = 0; i < len; i++) ret[i] = Long.parseLong(next());
      return ret;
    }
    @Override public void close() throws IOException { br.close(); }
  }
} public class Main {
  public static void main(String[] args) {
    new Main().solve();
  }

  private void solve() {
    try(InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out)) {

      int n = in.nextInt();
      int[] a = in.mapInt(n);

      int[] colors = new int[9];
      for (int rate : a) {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      }

      int count = 0;
      for (int i = 0; i < 8; i++) {
        count += colors[i] > 0 ? 1 : 0;
      }

      int max = count + colors[8];
      int min = count != 0 ? count : 1;
      out.println(min + " " + max);
    }
    catch(IOException e) {
      System.err.println(e);
    }
  }

  int atoi(String s) { return Integer.parseInt(s); }
  long atol(String s) { return Long.parseLong(s); }

  static class InputReader implements AutoCloseable {
    public BufferedReader br;
    public StringTokenizer st;

    public InputReader(InputStream stream) {
      br = new BufferedReader(new InputStreamReader(stream), 32768);
      st = null;
    }

    public String nextLine() throws IOException {
      return br.readLine();
    }
    public String next() {
      if (st == null || !st.hasMoreTokens()) {
        try { st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        }
      }
      return st.nextToken();
    }
    public int nextInt() { return Integer.parseInt(next()); }
    public long nextLong() { return Long.parseLong(next()); }
    int[] mapInt(int len) {
      int[] ret = new int[len];
      for (int i = 0; i < len; i++) ret[i] = Integer.parseInt(next());
      return ret;
    }
    long[] mapLong(int len) {
      long[] ret = new long[len];
      for (int i = 0; i < len; i++) ret[i] = Long.parseLong(next());
      return ret;
    }
    @Override public void close() throws IOException { br.close(); }
  }
} Main
import java.io.*;
import java.util.StringTokenizer;
import static java.lang.Math.*;

public class Main {
  public static void main(String[] args) {
    new Main().solve();
  }

  private void solve() {
    try(InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out)) {

      int n = in.nextInt();
      int[] a = in.mapInt(n);

      int[] colors = new int[9];
      for (int rate : a) {
          int rank = rate >= 3200 ? 8 : rate / 400;
          colors[rank]++;
      }

      int count = 0;
      for (int i = 0; i < 8; i++) {
        count += colors[i] > 0 ? 1 : 0;
      }

      int max = count + colors[8];
      int min = count != 0 ? count : 1;
      out.println(min + " " + max);
    }
    catch(IOException e) {
      System.err.println(e);
    }
  }

  int atoi(String s) { return Integer.parseInt(s); }
  long atol(String s) { return Long.parseLong(s); }

  static class InputReader implements AutoCloseable {
    public BufferedReader br;
    public StringTokenizer st;

    public InputReader(InputStream stream) {
      br = new BufferedReader(new InputStreamReader(stream), 32768);
      st = null;
    }

    public String nextLine() throws IOException {
      return br.readLine();
    }
    public String next() {
      if (st == null || !st.hasMoreTokens()) {
        try { st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          throw new UncheckedIOException(e);
        }
      }
      return st.nextToken();
    }
    public int nextInt() { return Integer.parseInt(next()); }
    public long nextLong() { return Long.parseLong(next()); }
    int[] mapInt(int len) {
      int[] ret = new int[len];
      for (int i = 0; i < len; i++) ret[i] = Integer.parseInt(next());
      return ret;
    }
    long[] mapLong(int len) {
      long[] ret = new long[len];
      for (int i = 0; i < len; i++) ret[i] = Long.parseLong(next());
      return ret;
    }
    @Override public void close() throws IOException { br.close(); }
  }
}