#include <bits/stdc++.h>
using namespace std;
#define ll long long
int a[5],n,cnt;
/* n: số lượng nhóm
cnt: số lượt trình diễn ít nhất
a[5]: đánh số từ 1 đến 4, A_i là số lượng nhóm có i thành viên (0<i<5)
*/
int main() {
freopen("AODAI.INP","r",stdin);
freopen("AODAI.OUT","w",stdout);
// nhập xuất file theo đề bài
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n;
for(int i=1;i<=n;i++) {
int x; cin >> x;
a[x]++;
// nhập vào n nhóm và cộng A_x lên một đơn vị mỗi khi gặp nhóm có x thành viên
}
cnt=a[4]; // nhóm nào có 4 thành viên thì không thể kết hợp thêm nhóm khác nên cnt = a[4] luôn
cnt+=a[3], a[1]-=a[3]; // nhóm 3 kết hợp được với nhóm 1 (3+1 = 4) nên cnt += a[3]
// đồng thời nhóm 1 cũng phải trừ đi số lượng nhóm 3 bởi vì mỗi nhóm 3 đã kết hợp với 1 nhóm 1 rồi
cnt+=a[2]/2; // nhóm có 2 thành viên thì ta có thể ghép 2 nhóm 2 lại (2+2 = 4) nên cnt += a[2]/2 (lấy nguyên)
if(a[2]%2!=0) cnt+=1,a[1]-=2; // nếu a[2] là số lẻ thì cnt += 1 và nhóm 1 trừ 2 đơn vị
// bởi vì nhóm 2 còn lại (do ở trên ghép 2 nhóm 2 một lần) sẽ kết hợp với 2 nhóm 1
if(a[1]>0) {
// nếu a[1] > 0 thì tính bởi vì ở trên sau khi nhóm 1 bị trừ thì có thể âm hoặc = 0
cnt+=a[1]/4; // kết hợp 4 nhóm 1 lại một lần (1+1+1+1 = 4) nên cnt += a[1]/4 (lấy nguyên)
if(a[1]%4!=0) cnt+=1; // nếu a[1] không chia hết cho 4 có nghĩa là
// sau khi kết hợp 4 nhóm 1 thành 1 nhóm thì còn dư lại một phần < 4 nên ta phải cnt += 1
}
cout << cnt;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCmludCBhWzVdLG4sY250OwovKiBuOiBz4buRIGzGsOG7o25nIG5ow7NtCiAgIGNudDogc+G7kSBsxrDhu6N0IHRyw6xuaCBkaeG7hW4gw610IG5o4bqldAogICBhWzVdOiDEkcOhbmggc+G7kSB04burIDEgxJHhur9uIDQsIEFfaSBsw6Agc+G7kSBsxrDhu6NuZyBuaMOzbSBjw7MgaSB0aMOgbmggdmnDqm4gKDA8aTw1KQoqLwppbnQgbWFpbigpIHsKICAgIGZyZW9wZW4oIkFPREFJLklOUCIsInIiLHN0ZGluKTsKICAgIGZyZW9wZW4oIkFPREFJLk9VVCIsInciLHN0ZG91dCk7CiAgICAvLyBuaOG6rXAgeHXhuqV0IGZpbGUgdGhlbyDEkeG7gSBiw6BpCiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApLCBjb3V0LnRpZSgwKTsKICAgIGNpbiA+PiBuOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspIHsKICAgICAgICBpbnQgeDsgY2luID4+IHg7CiAgICAgICAgYVt4XSsrOwogICAgICAgIC8vIG5o4bqtcCB2w6BvIG4gbmjDs20gdsOgIGPhu5luZyBBX3ggbMOqbiBt4buZdCDEkcahbiB24buLIG3hu5dpIGtoaSBn4bq3cCBuaMOzbSBjw7MgeCB0aMOgbmggdmnDqm4KICAgIH0KICAgIGNudD1hWzRdOyAvLyBuaMOzbSBuw6BvIGPDsyA0IHRow6BuaCB2acOqbiB0aMOsIGtow7RuZyB0aOG7gyBr4bq/dCBo4bujcCB0aMOqbSBuaMOzbSBraMOhYyBuw6puIGNudCA9IGFbNF0gbHXDtG4KICAgIGNudCs9YVszXSwgYVsxXS09YVszXTsgLy8gbmjDs20gMyBr4bq/dCBo4bujcCDEkcaw4bujYyB24bubaSBuaMOzbSAxICgzKzEgPSA0KSBuw6puIGNudCArPSBhWzNdCiAgICAvLyDEkeG7k25nIHRo4budaSBuaMOzbSAxIGPFqW5nIHBo4bqjaSB0cuG7qyDEkWkgc+G7kSBsxrDhu6NuZyBuaMOzbSAzIGLhu59pIHbDrCBt4buXaSBuaMOzbSAzIMSRw6Mga+G6v3QgaOG7o3AgduG7m2kgMSBuaMOzbSAxIHLhu5NpCiAgICBjbnQrPWFbMl0vMjsgLy8gbmjDs20gY8OzIDIgdGjDoG5oIHZpw6puIHRow6wgdGEgY8OzIHRo4buDIGdow6lwIDIgbmjDs20gMiBs4bqhaSAoMisyID0gNCkgbsOqbiBjbnQgKz0gYVsyXS8yIChs4bqleSBuZ3V5w6puKQogICAgaWYoYVsyXSUyIT0wKSBjbnQrPTEsYVsxXS09MjsgLy8gbuG6v3UgYVsyXSBsw6Agc+G7kSBs4bq7IHRow6wgY250ICs9IDEgdsOgIG5ow7NtIDEgdHLhu6sgMiDEkcahbiB24buLCiAgICAvLyBi4bufaSB2w6wgbmjDs20gMiBjw7JuIGzhuqFpIChkbyDhu58gdHLDqm4gZ2jDqXAgMiBuaMOzbSAyIG3hu5l0IGzhuqduKSBz4bq9IGvhur90IGjhu6NwIHbhu5tpIDIgbmjDs20gMQogICAgaWYoYVsxXT4wKSB7CiAgICAgICAgLy8gbuG6v3UgYVsxXSA+IDAgdGjDrCB0w61uaCBi4bufaSB2w6wg4bufIHRyw6puIHNhdSBraGkgbmjDs20gMSBi4buLIHRy4burIHRow6wgY8OzIHRo4buDIMOibSBob+G6t2MgPSAwCiAgICAgICAgY250Kz1hWzFdLzQ7IC8vIGvhur90IGjhu6NwIDQgbmjDs20gMSBs4bqhaSBt4buZdCBs4bqnbiAoMSsxKzErMSA9IDQpICBuw6puIGNudCArPSBhWzFdLzQgKGzhuqV5IG5ndXnDqm4pCiAgICAgICAgaWYoYVsxXSU0IT0wKSBjbnQrPTE7IC8vIG7hur91IGFbMV0ga2jDtG5nIGNoaWEgaOG6v3QgY2hvIDQgY8OzIG5naMSpYSBsw6AKICAgICAgICAvLyBzYXUga2hpIGvhur90IGjhu6NwIDQgbmjDs20gMSB0aMOgbmggMSBuaMOzbSB0aMOsIGPDsm4gZMawIGzhuqFpIG3hu5l0IHBo4bqnbiA8IDQgbsOqbiB0YSBwaOG6o2kgY250ICs9IDEKICAgIH0KICAgIGNvdXQgPDwgY250OwogICAgcmV0dXJuIDA7Cn0=