#include <bits/stdc++.h>
using namespace std;
int main() {
  int used[10];
  memset(used, 0, sizeof(used));
  long long n, ans = 0, tf = 0;
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    int a;
    cin >> a;
    used[a]++;
  }
  ans += used[4];
  if (used[1] <= used[3]) {
    ans += used[1];
    if (used[1] < used[3]) {
      ans += (used[3] - used[1]);
    }
  } else if (used[1] > used[3]) {
    tf = used[1] - used[3];
    ans += used[3];
  }
  if (used[2] % 2 == 0) {
    ans += (used[2] / 2);
    if (tf <= 4 && tf != 0)
      ans += 1;
    else {
      ans += tf / 4;
      if (tf % 4) ans += 1;
    }
  } else {
    if (used[2] == 1) {
      long long b;
      if (tf > 2) {
        b = tf - 2;
        ans += 1;
        if (b > 4) {
          ans += b / 4;
          if (b % 4) ans++;
        } else
          ans++;
      } else
        ans++;
    } else if (used[2] > 1) {
      if (used[2] % 2) {
        ans += (used[2] / 2);
        tf += 2;
        if (tf > 4) {
          ans += tf / 4;
          if (tf % 4) ans++;
        } else if (tf != 0) {
          ans++;
        }
      } else {
        ans += (used[2] / 2);
        if (tf > 4) {
          ans += tf / 4;
          if (tf % 4) ans++;
        } else
          ans++;
      }
    }
  }
  cout << ans << endl;
  return 0;
}
