#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int n, cnt[5];
inline void updata(int a, int b, int c, int d) {
  cnt[1] += a, cnt[2] += b, cnt[3] += c, cnt[4] += d;
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) cnt[read()]++;
  int ans = 0;
  while (cnt[1] || cnt[2]) {
    if (cnt[1] && cnt[2])
      ans++, updata(-1, -1, 1, 0);
    else if (cnt[1] >= 3)
      ans += 2, updata(-3, 0, 1, 0);
    else if (cnt[1] >= 2 && cnt[4] >= 1)
      ans += 2, updata(-2, 0, 2, -1);
    else if (cnt[1] >= 1 && cnt[3])
      ans++, updata(-1, 0, -1, 1);
    else if (cnt[1] >= 1 && cnt[4] >= 2)
      ans += 2, updata(-1, 0, 3, -2);
    else if (cnt[2] > 1)
      ans++, updata(1, -2, 1, 0);
    else if (cnt[2] >= 1 && cnt[4] >= 1)
      ans++, updata(0, -1, 1, -1);
    else if (cnt[2] >= 1 && cnt[3] >= 2)
      ans += 2, updata(0, -1, -2, 2);
    else {
      printf("-1");
      return 0;
    }
  }
  printf("%d", ans);
  return 0;
}
