#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <math.h>
#include <string>
#include <numeric>
#include <queue>
#include <cstdio>
#include <cstring>
#define ll long long
#define rep(i,n) for(ll i=0;i<n;++i)
#define rep1(i,n) for(ll i=1;i<n;++i)
#define mrep(i,n) for(ll i=n;i>=0;--i)
#define all(a) (a).begin(),(a).end()
#define vl vector<ll>
#define vvl vector<vector<ll> >
#define vb vector<bool>
#define vvb vector<vector<bool> >
#define pl pair<ll,ll>
#define inf 1001001001001001000
//#define mod 1000000007
#define mod 998244353
#define pi 3.1415926535
using namespace std;
struct __INIT{
    __INIT(){
        cin.tie(0);
        ios::sync_with_stdio(false);
        cout<<fixed<<setprecision(15);
    }
}__init;

ll gcd(ll a,ll b){
    if(a<b) return gcd(b,a);
    ll r;
    while((r=a%b)){
        a = b;
        b = r;
    }
    return b;
}

int main(void){
    //map<ll,ll> test = primefact(11);
    //for(pl ngo:test) cout<<ngo.first<<" "<<ngo.second<<endl;
    ll n;
    cin>>n;
    rep(i,n){
        ll a,b,c;
        cin>>a>>b>>c;
        if(a == 0){
            cout<<"Finite"<<endl;
            continue;
        }
        ll ab = gcd(a,b);
        b /= ab;
        if(b == 1){
            cout<<"Finite"<<endl;
            continue;
        }
        while(c < b) c*=c;
        if(gcd(b,c) == b){
            cout<<"Finite"<<endl;
        }
        else{
            cout<<"Infinite"<<endl;
        }
    }
}


#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <math.h>
#include <string>
#include <numeric>
#include <queue>
#include <cstdio>
#include <cstring>
#define ll long long
#define rep(i,n) for(ll i=0;i<n;++i)
#define rep1(i,n) for(ll i=1;i<n;++i)
#define mrep(i,n) for(ll i=n;i>=0;--i)
#define all(a) (a).begin(),(a).end()
#define vl vector<ll>
#define vvl vector<vector<ll> >
#define vb vector<bool>
#define vvb vector<vector<bool> >
#define pl pair<ll,ll>
#define inf 1001001001001001000
//#define mod 1000000007
#define mod 998244353
#define pi 3.1415926535
using namespace std;
struct __INIT{
    __INIT(){
        cin.tie(0);
        ios::sync_with_stdio(false);
        cout<<fixed<<setprecision(15);
    }
}__init;

ll gcd(ll a,ll b){
    if(a<b) return gcd(b,a);
    ll r;
    while((r=a%b)){
        a = b;
        b = r;
    }
    return b;
}

int main(void){
    //map<ll,ll> test = primefact(11);
    //for(pl ngo:test) cout<<ngo.first<<" "<<ngo.second<<endl;
    ll n;
    cin>>n;
    rep(i,n){
        ll a,b,c;
        cin>>a>>b>>c;
        if(a == 0){
            cout<<"Finite"<<endl;
            continue;
        }
        ll ab = gcd(a,b);
        b /= ab;
        if(b == 1){
            cout<<"Finite"<<endl;
            continue;
        }
        ll dame = false;
        ll bc = gcd(b,c);
        if(bc == 1){
            cout<<"Infinite"<<endl;
            continue;
        }
        while(b > 1){
            if(b%bc == 0) b /= bc;
            else{
                bc = gcd(b,c);
                if(bc == 1){
                    dame = true;
                    break;
                }
            }
        }
        if(dame){
            cout<<"Infinite"<<endl;
        }
        else{
            cout<<"Finite"<<endl;
        }
    }
}


#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <math.h>
#include <string>
#include <numeric>
#include <queue>
#include <cstdio>
#include <cstring>
#define ll long long
#define rep(i,n) for(ll i=0;i<n;++i)
#define rep1(i,n) for(ll i=1;i<n;++i)
#define mrep(i,n) for(ll i=n;i>=0;--i)
#define all(a) (a).begin(),(a).end()
#define vl vector<ll>
#define vvl vector<vector<ll> >
#define vb vector<bool>
#define vvb vector<vector<bool> >
#define pl pair<ll,ll>
#define inf 1001001001001001000
//#define mod 1000000007
#define mod 998244353
#define pi 3.1415926535
using namespace std;
struct __INIT{
    __INIT(){
        cin.tie(0);
        ios::sync_with_stdio(false);
        cout<<fixed<<setprecision(15);
    }
}__init;

map<ll,ll> primefact(ll n){
    ll a = 2;
    map<ll,ll> ret;
    while(a*a <= n){
        if(n%a == 0){
            n /= a;
            ret[a]++;
        }
        else{
            a++;
        }
    }
    ret[n]++;
    return ret;
}

int main(void){
    //map<ll,ll> test = primefact(3*3*2);
    //for(pl ngo:test) cout<<ngo.first<<" "<<ngo.second<<endl;
    ll n;
    cin>>n;
    rep(i,n){
        ll a,b,c;
        cin>>a>>b>>c;
        map<ll,ll> pa = primefact(a);
        map<ll,ll> pb = primefact(b);
        map<ll,ll> pc = primefact(c);
        for(pair<ll,ll> ngo:pc){
            pa[ngo.first] = inf;
        }
        bool dame = false;
        for(pair<ll,ll> ngo:pb){
            //cout<<ngo.first<<endl;
            if(pa[ngo.first] < ngo.second){
                cout<<"Infinite"<<endl;
                dame = true;
                break;
            }
        }
        if(dame == false){
            cout<<"Finite"<<endl;
        }
    }
}


#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <math.h>
#include <string>
#include <numeric>
#include <queue>
#include <cstdio>
#include <cstring>
#define ll long long
#define rep(i,n) for(ll i=0;i<n;++i)
#define rep1(i,n) for(ll i=1;i<n;++i)
#define mrep(i,n) for(ll i=n;i>=0;--i)
#define all(a) (a).begin(),(a).end()
#define vl vector<ll>
#define vvl vector<vector<ll> >
#define vb vector<bool>
#define vvb vector<vector<bool> >
#define pl pair<ll,ll>
#define inf 1001001001001001000
//#define mod 1000000007
#define mod 998244353
#define pi 3.1415926535
using namespace std;
struct __INIT{
    __INIT(){
        cin.tie(0);
        ios::sync_with_stdio(false);
        cout<<fixed<<setprecision(15);
    }
}__init;

ll gcd(ll a,ll b){
    if(a<b) return gcd(b,a);
    ll r;
    while((r=a%b)){
        a = b;
        b = r;
    }
    return b;
}

int main(void){
    map<ll,ll> test = primefact(11);
    for(pl ngo:test) cout<<ngo.first<<" "<<ngo.second<<endl;
    ll n;
    cin>>n;
    rep(i,n){
        ll a,b,c;
        cin>>a>>b>>c;
        ll ab = gcd(a,b);
        b /= ab;
        if(b == 1){
            cout<<"Finite"<<endl;
            continue;
        }
        if(gcd(b,c) == 1){
            cout<<"Infinite"<<endl;
        }
        else{
            cout<<"Finite"<<endl;
        }
    }
}


#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <math.h>
#include <string>
#include <numeric>
#include <queue>
#include <cstdio>
#include <cstring>
#define ll long long
#define rep(i,n) for(ll i=0;i<n;++i)
#define rep1(i,n) for(ll i=1;i<n;++i)
#define mrep(i,n) for(ll i=n;i>=0;--i)
#define all(a) (a).begin(),(a).end()
#define vl vector<ll>
#define vvl vector<vector<ll> >
#define vb vector<bool>
#define vvb vector<vector<bool> >
#define pl pair<ll,ll>
#define inf 1001001001001001000
//#define mod 1000000007
#define mod 998244353
#define pi 3.1415926535
using namespace std;
struct __INIT{
    __INIT(){
        cin.tie(0);
        ios::sync_with_stdio(false);
        cout<<fixed<<setprecision(15);
    }
}__init;

ll gcd(ll a,ll b){
    if(a<b) return gcd(b,a);
    ll r;
    while((r=a%b)){
        a = b;
        b = r;
    }
    return b;
}

int main(void){
    //map<ll,ll> test = primefact(11);
    //for(pl ngo:test) cout<<ngo.first<<" "<<ngo.second<<endl;
    ll n;
    cin>>n;
    rep(i,n){
        ll a,b,c;
        cin>>a>>b>>c;
        ll ab = gcd(a,b);
        b /= ab;
        if(b == 1){
            cout<<"Finite"<<endl;
            continue;
        }
        if(gcd(b,c) == 1){
            cout<<"Infinite"<<endl;
        }
        else{
            cout<<"Finite"<<endl;
        }
    }
}


#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <random>
#include <cassert>

using namespace std;
typedef long long ll;

const int max_n = 300011, log_n = 32, max_m = 111, mod = 1000000007, inf = 1011111111;

ll a, b, n, m;
vector<int> p;

void get_p() {
    for (int i = 2; i < 200; ++i) {
        bool fl = 0;
        for (int q = 2; q * q <= i; ++q) {
            if (i % q == 0) {
                fl = 1;
                break;
            }
        }
        if (!fl) {
            p.push_back(i);
        }
    }
}

ll mult(ll a, ll b, ll mod) {
    if (b == 0) return 0;
    if (b == 1) return a % mod;
    ll x = mult(a, b / 2, mod);
    if (b % 2 == 0) return 2 * x % mod;
    return (2 * x + a) % mod;
}

int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    get_p();
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a >> b >> m;
        if (a == 0) {
            cout << "Finite" << endl;
            continue;
        }
        ll g = __gcd(a, b);
        a /= g;
        b /= g;
        if (b == 1) {
            cout << "Finite" << endl;
            continue;
        }
        bool fll = 0;
        for (int q = 0; q < p.size(); ++q) {
            if (b % p[q] == 0) {
                while (b % p[q] == 0) b /= p[q];
                if (m % p[q]) {
                    fll = 1;
                }
                while (m % p[q] == 0) m /= p[q];
            }
        }
        if (fll) {
            cout << "Infinite" << endl;
            continue;
        }
        a = m % b;
        bool fl = 0;
        for (int q = 0; q < 8; ++q) {
            if (a == 0) {
                fl = 1;
                break;
            }
            a = mult(a, m, b);
        }
        if (fl) {
            cout << "Finite" << endl;
        } else {
            cout << "Infinite" << endl;
        }
    }
    return 0;
}


#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <random>
#include <cassert>

using namespace std;
typedef long long ll;

const int max_n = 300011, log_n = 32, max_m = 111, mod = 1000000007, inf = 1011111111;

ll a, b, n, m;

ll mult(ll a, ll b, ll mod) {
    if (b == 0) return 0;
    if (b == 1) return a % mod;
    ll x = mult(a, b / 2, mod);
    if (b % 2 == 0) return 2 * x % mod;
    return (2 * x + a) % mod;
}

int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a >> b >> m;
        if (a == 0) {
            cout << "Finite" << endl;
            continue;
        }
        ll g = __gcd(a, b);
        a /= g;
        b /= g;
        if (b == 1) {
            cout << "Finite" << endl;
            continue;
        }
        bool fll = 0;
        for (int q = 2; q < 100; ++q) {
            while (b % q == 0) {
                b /= q;
                if (m % q) {
                    fll = 1;
                }
            }
        }
        if (fll) {
            cout << "Infinite" << endl;
            continue;
        }
        a = m % b;
        bool fl = 0;
        for (int q = 0; q < 10; ++q) {
            if (a == 0) {
                fl = 1;
                break;
            }
            a = mult(a, m, b);
        }
        if (fl) {
            cout << "Finite" << endl;
        } else {
            cout << "Infinite" << endl;
        }
    }
    return 0;
}


#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <random>
#include <cassert>

using namespace std;
typedef long long ll;

const int max_n = 300011, log_n = 32, max_m = 111, mod = 1000000007, inf = 1011111111;

ll a, b, n, m;
vector<int> p;

void get_p() {
    for (int i = 2; i < 200; ++i) {
        bool fl = 0;
        for (int q = 2; q * q <= i; ++q) {
            if (i % q == 0) {
                fl = 1;
                break;
            }
        }
        if (!fl) {
            p.push_back(i);
        }
    }
}

ll mult(ll a, ll b, ll mod) {
    if (b == 0) return 0;
    if (b == 1) return a % mod;
    ll x = mult(a, b / 2, mod);
    ll ans = 2 * x;
    if (ans > mod) ans -= mod;
    if (b % 2) ans += a;
    if (ans > mod) ans -= mod;
    return ans;
}

int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    get_p();
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a >> b >> m;
        if (a == 0) {
            cout << "Finite" << endl;
            continue;
        }
        ll g = __gcd(a, b);
        a /= g;
        b /= g;
        if (b == 1) {
            cout << "Finite" << endl;
            continue;
        }
        bool fll = 0;
        for (int q = 0; q < p.size(); ++q) {
            if (b % p[q] == 0) {
                while (b % p[q] == 0) b /= p[q];
                if (m % p[q]) {
                    fll = 1;
                }
                while (m % p[q] == 0) m /= p[q];
            }
        }
        if (fll) {
            cout << "Infinite" << endl;
            continue;
        }
        a = m % b;
        bool fl = 0;
        for (int q = 0; q < 8; ++q) {
            if (a == 0) {
                fl = 1;
                break;
            }
            a = mult(a, m, b);
        }
        if (fl) {
            cout << "Finite" << endl;
        } else {
            cout << "Infinite" << endl;
        }
    }
    return 0;
}


#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <random>
#include <cassert>

using namespace std;
typedef long long ll;

const int max_n = 300011, log_n = 32, max_m = 111, mod = 1000000007, inf = 1011111111;

ll a, b, n, m;

ll mult(ll a, ll b, ll mod) {
    if (b == 0) return 0;
    if (b == 1) return a % mod;
    ll x = mult(a, b / 2, mod);
    if (b % 2 == 0) return 2 * x % mod;
    return (2 * x + a) % mod;
}

int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a >> b >> m;
        if (a == 0) {
            cout << "Finite" << endl;
            continue;
        }
        ll g = __gcd(a, b);
        a /= g;
        b /= g;
        if (b == 1) {
            cout << "Finite" << endl;
            continue;
        }
        a = m % b;
        bool fl = 0;
        for (int q = 0; q < 66; ++q) {
            if (a == 0) {
                fl = 1;
                break;
            }
            a = mult(a, m, b);
        }
        if (fl) {
            cout << "Finite" << endl;
        } else {
            cout << "Infinite" << endl;
        }
    }
    return 0;
}


#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <random>
#include <cassert>

using namespace std;
typedef long long ll;

const int max_n = 300011, log_n = 32, max_m = 111, mod = 1000000007, inf = 1011111111;

ll a, b, n, m;
vector<int> p;

void get_p() {
    for (int i = 2; i < 200; ++i) {
        bool fl = 0;
        for (int q = 2; q * q <= i; ++q) {
            if (i % q == 0) {
                fl = 1;
                break;
            }
        }
        if (!fl) {
            p.push_back(i);
        }
    }
}

ll mult(ll a, ll b, ll mod) {
    if (b == 0) return 0;
    if (b == 1) return a % mod;
    ll x = mult(a, b / 2, mod);
    if (b % 2 == 0) return 2 * x % mod;
    return (2 * x + a) % mod;
}

int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    get_p();
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a >> b >> m;
        if (a == 0) {
            cout << "Finite" << endl;
            continue;
        }
        ll g = __gcd(a, b);
        a /= g;
        b /= g;
        if (b == 1) {
            cout << "Finite" << endl;
            continue;
        }
        bool fll = 0;
        for (int q = 0; q < p.size(); ++q) {
            if (b % q == 0) {
                while (b % q == 0) b /= q;
                if (m % q) {
                    fll = 1;
                }
                while (m % q == 0) m /= q;
            }
        }
        if (fll) {
            cout << "Infinite" << endl;
            continue;
        }
        a = m % b;
        bool fl = 0;
        for (int q = 0; q < 8; ++q) {
            if (a == 0) {
                fl = 1;
                break;
            }
            a = mult(a, m, b);
        }
        if (fl) {
            cout << "Finite" << endl;
        } else {
            cout << "Infinite" << endl;
        }
    }
    return 0;
}


#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <random>
#include <cassert>

using namespace std;
typedef long long ll;

const int max_n = 300011, log_n = 32, max_m = 111, mod = 1000000007, inf = 1011111111;

ll a, b, n, m;
vector<int> p;

void get_p() {
    for (int i = 2; i < 200; ++i) {
        bool fl = 0;
        for (int q = 2; q * q <= i; ++q) {
            if (i % q == 0) {
                fl = 1;
                break;
            }
        }
        if (!fl) {
            p.push_back(i);
        }
    }
}

ll mult(ll a, ll b, ll mod) {
    if (b == 0) return 0;
    if (b == 1) return a % mod;
    ll x = mult(a, b / 2, mod);
    ll ans = 2 * x;
    if (ans > mod) ans -= mod;
    if (b % 2) ans += a;
    if (ans > mod) ans -= mod;
    return ans;
}

void print(bool fl) {
    if (fl) {
        printf("Finite\n");
    } else {
        printf("Infinite\n");
    }
}

ll gcd(ll a, ll b) {
    if (b == 0) return a;
    if (a == 0) return b;
    return gcd(b % a, a);
}

int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    get_p();
    cin >> n;
    for (int i = 0; i < n; ++i) {
        scanf("%lld%lld%lld", &a, &b, &m);
        if (a == 0) {
            print(1);
            continue;
        }
        ll g = gcd(a, b);
        a /= g;
        b /= g;
        if (b == 1) {
            print(1);
            continue;
        }
        bool fll = 0;
        for (int q = 0; q < p.size(); ++q) {
            if (b % p[q] == 0) {
                if (m % p[q]) {
                    fll = 1;
                    break;
                }
                while (b % p[q] == 0) b /= p[q];
                while (m % p[q] == 0) m /= p[q];
            }
        }
        if (fll) {
            print(0);
            continue;
        }
        a = m % b;
        bool fl = 0;
        for (int q = 0; q < 10; ++q) {
            if (a == 0) {
                fl = 1;
                break;
            }
            a = mult(a, m, b);
        }
        if (fl) {
            print(1);
        } else {
            print(0);
        }
    }
    return 0;
}


import java.util.Scanner;

public class problem158b {
    public static void main (String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        in.nextLine();
        float l = 0;
        String[] nums = in.nextLine().split(" ");
        for (int i = 0; i < n; i++) {
            l += (float) Integer.parseInt(nums[i]);
        }
        System.out.println((int) Math.ceil(l / 4));
        in.close();
    }
}


import java.util.*;
public class CF_158B
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int a[]=new int[n];
        for(int i=0;i<n;i++)
            a[i]=sc.nextInt();
        int a1[]=new int[n];
        int ans=0;
        a1[0]=a[0];
        for(int i=1;i<a.length;i++)
        {
            if(a[i]!=4)
            {
                for(int j=0;j<a1.length;j++)
                {
                    if(4-a[i]>=a1[j])
                    {
                        a1[j]+=a[i];
                        if(a1[j]==4)
                        {
                            a1[j]=0;
                            ans++;
                        }
                        break;
                    }
                }
            }
            else
                ans++;
        }
        for(int j=0;j<a1.length;j++)
        {
            //System.out.print(a1[j]+" ");
            if(a1[j]!=0)
                ans++;
        }
        System.out.print(ans);
    }
}


import java.util.*;
public class 158B
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int a[]=new int[n];
        for(int i=0;i<n;i++)
            a[i]=sc.nextInt();
        int a1=new int[n];
        int ans=0;
        a1[0]=a[0];
        for(int i=1;i<a.length;i++)
        {
            if(a[i]!=4)
            {
                for(int j=0;j<a1.length;j++)
                {
                    if(4-a[i]>=a1[j])
                    {
                        a1[j]+=a[i];
                        if(a1[j]==4)
                        {
                            a1[j]=0;
                            ans++;
                        }
                    }
                }
            }
            else
                ans++;
        }
        System.out.print(ans);
    }
}


import java.util.*;
public class CF_158B
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int a[]=new int[n];
        for(int i=0;i<n;i++)
            a[i]=sc.nextInt();
        int a1[]=new int[n];
        int ans=0;
        a1[0]=a[0];
        for(int i=1;i<a.length;i++)
        {
            if(a[i]!=4)
            {
                for(int j=0;j<a1.length;j++)
                {
                    if(4-a[i]>=a1[j])
                    {
                        a1[j]+=a[i];
                        if(a1[j]==4)
                        {
                            a1[j]=0;
                            ans++;
                        }
                    }
                }
            }
            else
                ans++;
        }
        for(int j=0;j<a1.length;j++)
        {
            if(a[j]!=0)
                ans++;
        }
        System.out.print(ans);
    }
}


import java.util.*;
public class A
{
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int a[]=new int[n];
        int ans=0;
        for(int i=0;i<n;i++)
        {
            a[i]=sc.nextInt();
            ans+=a[i];
        }
        if(ans%4!=0)
            System.out.println((ans/4)+1);
         else
            System.out.println(ans/4);
    }
}


import java.util.*;
public class Rough
{

    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int t=sc.nextInt();
        int a[]=new int[t];
        int one=0,two=0,three=0,taxi=0;
        for(int i=0;i<t;i++)
        {    a[i]=sc.nextInt();
            if(a[i]==1)
                one++;
            else if(a[i]==2)
                two++;
            else if(a[i]==3)
                three++;
            else
                taxi++;
        }
        while(three>0 && one>0)
        {
            three--;
            one--;
            taxi++;
        }
        if(three>0)
        {
            taxi+=three;
            three=0;
        }

            taxi+=two/2;
            two-=(two/2)*2;
            while(two>0 && one>0)
            {
                one-=2;
                two--;
                taxi++;
            }
            if(two>0)
            {
                taxi+=two;
                two=0;
            }

            //System.out.print(one);
            taxi+=one/4;
            one-=(one/4)*4;
            if(one>0)
            {
                taxi++;
                one=0;
            }

        System.out.println(taxi);
    }
}


import java.util.*;
public class CF_158B
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int a[]=new int[n];
        for(int i=0;i<n;i++)
            a[i]=sc.nextInt();
        int a1[]=new int[n];
        int ans=0;
        a1[0]=a[0];
        for(int i=1;i<a.length;i++)
        {
            if(a[i]!=4)
            {
                for(int j=0;j<a1.length;j++)
                {
                    if(4-a[i]>=a1[j])
                    {
                        a1[j]+=a[i];

                        break;
                    }
                }
            }
            else
                ans++;
        }
        for(int j=0;j<a1.length;j++)
        {
            //System.out.print(a1[j]+" ");
            if(a1[j]!=0 )
                ans++;
        }
        System.out.print(ans);
    }
}


import java.util.*;
public class CF_158B
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int a[]=new int[n];
        for(int i=0;i<n;i++)
            a[i]=sc.nextInt();
        int a1[]=new int[n];
        int ans=0;
        a1[0]=a[0];
        for(int i=1;i<a.length;i++)
        {
            if(a[i]!=4)
            {
                for(int j=0;j<a1.length;j++)
                {
                    if(4-a[i]>=a1[j])
                    {
                        a1[j]+=a[i];
                        if(a1[j]==4)
                        {
                            a1[j]=0;
                            ans++;
                        }
                    }
                }
            }
            else
                ans++;
        }
        System.out.print(ans);
    }
}


import java.util.*;
public class CF_158B
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int a[]=new int[n];
        for(int i=0;i<n;i++)
            a[i]=sc.nextInt();
        int a1=new int[n];
        int ans=0;
        a1[0]=a[0];
        for(int i=1;i<a.length;i++)
        {
            if(a[i]!=4)
            {
                for(int j=0;j<a1.length;j++)
                {
                    if(4-a[i]>=a1[j])
                    {
                        a1[j]+=a[i];
                        if(a1[j]==4)
                        {
                            a1[j]=0;
                            ans++;
                        }
                    }
                }
            }
            else
                ans++;
        }
        System.out.print(ans);
    }
}


import java.util.*;
public class Rough
{

    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int t=sc.nextInt();
        int a[]=new int[t];
        int one=0,two=0,three=0,taxi=0;
        for(int i=0;i<t;i++)
        {    a[i]=sc.nextInt();
            if(a[i]==1)
                one++;
            else if(a[i]==2)
                two++;
            else if(a[i]==3)
                three++;
            else
                taxi++;
        }
        while(three>0 && one>0)
        {
            three--;
            one--;
            taxi++;
        }
        if(three>0)
        {
            taxi+=three;
            three=0;
        }
        while(two>0)
        {
            taxi+=two/2;
            two-=(two/2)*2;
            if(two>0 && one>1)
            {
                one-=2;
                two--;
                taxi++;
            }
            if(two>0)
            {
                taxi+=two;
                two=0;
            }
        }
        while(one>0)
        {
            taxi+=one/4;
            taxi-=(one/4)*4;
            if(one>0)
            {
                taxi++;
                one=0;
            }
        }
        System.out.println(taxi);
    }
}


import java.util.*;
public class A
{
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int a[i]=new int[n];
        int ans=0;
        for(int i=0;i<n;i++)
        {
            a[i]=sc.nextInt();
            ans+=a[i];
        }
        if(ans%4!=0)
            System.out.println((ans/4)+1);
         else
            System.out.println(ans/4);
    }
}


import java.util.*;
public class CF_158B
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int a[]=new int[n];
        for(int i=0;i<n;i++)
            a[i]=sc.nextInt();
        int a1[]=new int[n];
        int ans=0;
        a1[0]=a[0];
        for(int i=1;i<a.length;i++)
        {
            if(a[i]!=4)
            {
                for(int j=0;j<a1.length;j++)
                {
                    if(4-a[i]>=a1[j])
                    {
                        a1[j]+=a[i];
                        if(a1[j]==4)
                            ans++;
                        break;
                    }
                }
            }
            else
                ans++;
        }
        for(int j=0;j<a1.length;j++)
        {
            //System.out.print(a1[j]+" ");
            if(a1[j]!=0 )
                ans++;
        }
        System.out.print(ans);
    }
}


import java.util.*;
public class Rough
{

    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int t=sc.nextInt();
        int a[]=new int[t];
        int one=0,two=0,three=0,taxi=0;
        for(int i=0;i<t;i++)
        {    a[i]=sc.nextInt();
            if(a[i]==1)
                one++;
            else if(a[i]==2)
                two++;
            else if(a[i]==3)
                three++;
            else
                taxi++;
        }
        while(three>0 && one>0)
        {
            three--;
            one--;
            taxi++;
        }
        if(three>0)
        {
            taxi+=three;
            three=0;
        }

            taxi+=two/2;
            two-=(two/2)*2;
            while(two>0 && one>1)
            {
                one-=2;
                two--;
                taxi++;
            }
            if(two>0)
            {
                taxi+=two;
                two=0;
            }

            taxi+=one/4;
            taxi-=(one/4)*4;
            if(one>0)
            {
                taxi++;
                one=0;
            }

        System.out.println(taxi);
    }
}


import java.util.*;
public class Rough
{

    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int t=sc.nextInt();
        int a[]=new int[t];
        int one=0,two=0,three=0,taxi=0;
        for(int i=0;i<t;i++)
        {    a[i]=sc.nextInt();
            if(a[i]==1)
                one++;
            else if(a[i]==2)
                two++;
            else if(a[i]==3)
                three++;
            else
                taxi++;
        }
        while(three>0 && one>0)
        {
            three--;
            one--;
            taxi++;
        }
        if(three>0)
        {
            taxi+=three;
            three=0;
        }

            taxi+=two/2;
            two-=(two/2)*2;
            while(two>0 && one>1)
            {
                one-=2;
                two--;
                taxi++;
            }
            if(two>0)
            {
                taxi+=two;
                two=0;
            }

            //System.out.print(one);
            taxi+=one/4;
            one-=(one/4)*4;
            if(one>0)
            {
                taxi++;
                one=0;
            }

        System.out.println(taxi);
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Taxi {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer;

        int n = Integer.parseInt(reader.readLine());
        tokenizer = new StringTokenizer(reader.readLine());
        int[] groups = new int[5];
        for (int i = 0; i < n; i++) {
            groups[Integer.parseInt(tokenizer.nextToken())]++;
        }

        int cars = groups[4];
        while (true) {
            if (groups[1] <= 0 && groups[2] <= 0 && groups[3] <= 0)
                break;
            if (groups[3] > 0) {
                if (groups[1] > 0) {
                    groups[1]--;
                }
                groups[3]--;
                cars++;
            }
            if (groups[2] > 0) {
                cars += Math.ceil((double) groups[2] / 2);
                groups[2] = 0;
            }
        }
        System.out.println(cars);
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Taxi {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer;

        int n = Integer.parseInt(reader.readLine());
        tokenizer = new StringTokenizer(reader.readLine());
        int[] groups = new int[5];
        for (int i = 0; i < n; i++) {
            groups[Integer.parseInt(tokenizer.nextToken())]++;
        }

        int cars = 0;
        cars += groups[4];
        cars += groups[3];

        groups[1] -= groups[3];
        if (groups[1] > 0) {
            cars += Math.ceil((double) groups[1] / 2);
        }
        cars += Math.ceil((double) groups[2] / 2);

        System.out.println(cars);
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Taxi {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer;

        int n = Integer.parseInt(reader.readLine());
        tokenizer = new StringTokenizer(reader.readLine());
        int[] groups = new int[5];
        for (int i = 0; i < n; i++) {
            groups[Integer.parseInt(tokenizer.nextToken())]++;
        }

        int cars = 0;
        cars += groups[4];
        cars += groups[3];
        cars += Math.ceil((double) groups[2] / 2);

        groups[1] -= groups[3];
        groups[1] -= groups[2] * 2;
        if (groups[1] > 0) {
            cars += Math.ceil((double) groups[1] / 4);
        }

        System.out.println(cars);
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Taxi {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer;

        int n = Integer.parseInt(reader.readLine());
        tokenizer = new StringTokenizer(reader.readLine());
        int[] groups = new int[5];
        for (int i = 0; i < n; i++) {
            groups[Integer.parseInt(tokenizer.nextToken())]++;
        }

        int cars = 0;
        cars += groups[4];
        cars += groups[3];
        cars += Math.ceil((double) groups[2] / 2);

        groups[1] -= groups[3];
        if (groups[2] % 2 != 0)
            groups[1] -= groups[2];
        if (groups[1] > 0) {
            cars += Math.ceil((double) groups[1] / 4);
        }

        System.out.println(cars);
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Taxi {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer;

        int n = Integer.parseInt(reader.readLine());
        tokenizer = new StringTokenizer(reader.readLine());
        int cars = 0;
        for (int i = 0; i < n; i++) {
            cars += Integer.parseInt(tokenizer.nextToken());
        }

        cars = (int)Math.ceil( cars / 4.0);
        System.out.println(cars);
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Taxi {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer;

        int n = Integer.parseInt(reader.readLine());
        tokenizer = new StringTokenizer(reader.readLine());
        int[] groups = new int[5];
        for (int i = 0; i < n; i++) {
            groups[Integer.parseInt(tokenizer.nextToken())]++;
        }

        int cars = 0;
        cars += groups[4];
        cars += groups[3];
        groups[1] -= groups[3];

        cars += Math.ceil((double) groups[2] / 2);

        groups[2] %= 2;
        groups[1] -= groups[2] * 2;
        if (groups[1] > 0) {
            cars += Math.ceil((double) groups[1] / 4);
        }

        System.out.println(cars);
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Taxi {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer;

        int n = Integer.parseInt(reader.readLine());
        tokenizer = new StringTokenizer(reader.readLine());
        int[] groups = new int[5];
        for (int i = 0; i < n; i++) {
            groups[Integer.parseInt(tokenizer.nextToken())]++;
        }

        int cars = 0;
        cars += groups[4];
        cars += groups[3];

        groups[1] -= groups[3];
        if (groups[1] > 0) {
            cars += Math.ceil((double) groups[2] / 2);
        }
        cars += Math.ceil((double) groups[2] / 2);

        System.out.println(cars);
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Taxi {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer;

        int n = Integer.parseInt(reader.readLine());
        tokenizer = new StringTokenizer(reader.readLine());
        int[] groups = new int[5];
        for (int i = 0; i < n; i++) {
            groups[Integer.parseInt(tokenizer.nextToken())]++;
        }

        int cars = 0;
        cars += groups[4];
        cars += groups[3];

        groups[1] -= groups[3];
        if (groups[1] > 0) {
            cars += Math.ceil((double) groups[1] / 4);
        }
        cars += Math.ceil((double) groups[2] / 2);

        System.out.println(cars);
    }
}


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // write your code here
        Scanner read = new Scanner(System.in);
        int numThrees = 0;
        int numTwos = 0;
        int numOnes = 0;
        int counter = 0;
        int n = read.nextInt();
        for (int i = 0; i < n; i++) {
            int newGroup = read.nextInt();
            if (newGroup == 4) {counter++;}
            else if (newGroup == 3) {numThrees++;}
            else if (newGroup == 2) {numTwos++;}
            else {numOnes++;}
        }
        if (numThrees > 0) {
            if (numThrees > numOnes) {counter += numThrees; numOnes = 0; numThrees = 0;}
            else {counter += numThrees; numOnes -= numThrees;}
        }
        if (numTwos > 0) {
            if (numTwos % 4 == 0) {counter += (numTwos/4);}
            else {
                if (numOnes >= 2) {counter++; numTwos = 0; numOnes -= 2;}
            }
        }
        counter += Math.ceil(numOnes/4.0);
        System.out.println(counter+1);

    }
}


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // write your code here
        Scanner read = new Scanner(System.in);
        int numThrees = 0;
        int numTwos = 0;
        int numOnes = 0;
        int counter = 0;
        int n = read.nextInt();
        for (int i = 0; i < n; i++) {
            int newGroup = read.nextInt();
            if (newGroup == 4) {counter++;}
            else if (newGroup == 3) {numThrees++;}
            else if (newGroup == 2) {numTwos++;}
            else {numOnes++;}
        }
        if (numThrees > 0) {
            if (numThrees >= numOnes) {counter += numThrees; numOnes = 0; numThrees = 0;}
            else {counter += numThrees; numOnes -= numThrees;}
        }
        if (numTwos > 0) {
            if (numTwos % 2 == 0) {counter += (numTwos/2);}
            else {
                counter++; numTwos = 0; numOnes -= 2;
            }
        }
        counter += Math.ceil(numOnes/4.0);
        System.out.println(counter);

    }
}


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
	// write your code here
        Scanner read = new Scanner(System.in);
        int n = read.nextInt();
        int counter = 0;
        int castOffs = 0;
        for (int i = 0; i < n; i++) {
            int newGroup = read.nextInt();
            if (newGroup == 4) {
                counter++;
            } else {
                castOffs += newGroup;
            }
        }
        int odds = (int) Math.ceil(castOffs/4.0);
        counter += odds;
        System.out.println(counter);
        }

    }


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // write your code here
        Scanner read = new Scanner(System.in);
        int numThrees = 0;
        int numTwos = 0;
        int numOnes = 0;
        int counter = 0;
        int n = read.nextInt();
        for (int i = 0; i < n; i++) {
            int newGroup = read.nextInt();
            if (newGroup == 4) {counter++;}
            else if (newGroup == 3) {numThrees++;}
            else if (newGroup == 2) {numTwos++;}
            else {numOnes++;}
        }
        System.out.println(numOnes);
        System.out.println(numThrees);
        System.out.println(numTwos);
        if (numThrees > 0) {
            if (numThrees >= numOnes) {counter += numThrees; numOnes = 0; numThrees = 0;}
            else {counter += numThrees; numOnes -= numThrees;}
        }
        if (numTwos > 0) {
            if (numTwos > 0) {
                counter += (numTwos/2);
                if (numTwos % 2 != 0) {counter++; numTwos = 0; numOnes -= 2;}
            }

        }
        counter += Math.ceil(numOnes/4.0);
        System.out.println(counter);

    }
}


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
	// write your code here
        Scanner read = new Scanner(System.in);
        int n = read.nextInt();
        int counter = 0;
        int numOnes = 0;
        int numTwos = 0;
        int numThrees = 0;
        for (int i = 0; i < n; i++) {
            int newGroup = read.nextInt();
            if (newGroup == 4) {counter++;}
            else if (newGroup == 3) {numThrees+=3;}
            else if (newGroup == 2) {numTwos+=2;}
            else {numOnes++;}
        }
        int set1 = (int) (Math.ceil((numThrees+numOnes)/4.0));
        counter += set1;
        int set2 = (int) (Math.ceil((numTwos)/4.0));
        counter += set2;
        System.out.println(counter);
        }
}


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // write your code here
        Scanner read = new Scanner(System.in);
        int numThrees = 0;
        int numTwos = 0;
        int numOnes = 0;
        int counter = 0;
        int n = read.nextInt();
        for (int i = 0; i < n; i++) {
            int newGroup = read.nextInt();
            if (newGroup == 4) {counter++;}
            else if (newGroup == 3) {numThrees++;}
            else if (newGroup == 2) {numTwos++;}
            else {numOnes++;}
        }

        if (numThrees > 0) {
            if (numThrees >= numOnes) {counter += numThrees; numOnes = 0; numThrees = 0;}
            else {counter += numThrees; numOnes -= numThrees;}
        }
        if (numTwos > 0) {
            if (numTwos > 0) {
                counter += (numTwos/2);
                if (numTwos % 2 != 0) {counter++; numTwos = 0; numOnes -= 2;}
            }

        }
        counter += Math.ceil(numOnes/4.0);
        System.out.println(counter);

    }
}


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
	// write your code here
        Scanner read = new Scanner(System.in);
        int n = read.nextInt();
        int counter = 0;
        int castOffs = 0;
        for (int i = 0; i < n; i++) {
            int newGroup = read.nextInt();
            if (newGroup == 4) {
                counter++;
            } else {
                castOffs += newGroup;
            }
        }
        int odd = (int) Math.ceil(castOffs/4.0);
        counter += odd;
        System.out.println(counter);
        }

    }


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // write your code here
        Scanner read = new Scanner(System.in);
        int numThrees = 0;
        int numTwos = 0;
        int numOnes = 0;
        int counter = 0;
        int n = read.nextInt();
        for (int i = 0; i < n; i++) {
            int newGroup = read.nextInt();
            if (newGroup == 4) {counter++;}
            else if (newGroup == 3) {numThrees++;}
            else if (newGroup == 2) {numTwos++;}
            else {numOnes++;}
        }
        if (numThrees > 0) {
            if (numThrees >= numOnes) {counter += numThrees; numOnes = 0; numThrees = 0;}
            else {counter += numThrees; numOnes -= numThrees;}
        }
        if (numTwos > 0) {
            if (numTwos % 2 == 0) {counter += (numTwos/2);}
            else {
                counter++; numTwos = 0; numOnes -= 2;
            }
        }
        counter += Math.ceil(numOnes/4);
        System.out.println(counter);

    }
}


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
	// write your code here
        Scanner read = new Scanner(System.in);
        int n = read.nextInt();
        int sumOf = 0;
        for (int i = 0; i < n; i++) {
            sumOf += read.nextByte();
        }
        int min = (int) (Math.ceil(sumOf/4.0));
        System.out.println(min);
    }
}


import java.util.*;
public class Taxi {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		int [] groups = new int [n];
		int four = 0;
		int three = 0;
		int two = 0;
		int one = 0;
		int taxi = 0;
		int currentValue = 0;
		for (int i = 0; i < n; i ++) {
			currentValue = scan.nextInt();
			groups [i] = currentValue;
			if (currentValue == 4) {
				four++;
			} else if (currentValue == 3) {
				three++;
			} else if (currentValue == 2) {
				two++;
			} else if (currentValue == 1) {
				one++;
			}
		}

		taxi = taxi + four;
		if (three == one) {
			taxi = taxi + three;
			three = 0;
			one = 0;

		} else if (three > one) {
			taxi = taxi + one;
			three = three - one;
			taxi = taxi + three;
			three = 0;
			one = 0;

		} else if (three < one) {
			taxi = taxi + three;
			one = one - three;
			three = 0;

		}
		if (two%2 == 0) {
			taxi = taxi + two/2;
			two = 0;

		} else {
			taxi = taxi + two/2;
			two = two%2;

		}
		if (two == 1 && one <= 2) {
			taxi++;
			two = 0;
			one = 0;

		}
		if (one > 1 && two == 1){
			taxi++;
			one = one - 2;
			two = 0;

		}
		if (one >= 4) {
			taxi = taxi + one/4;

			one = one%4;
			if (one > 0) {
				taxi++;

			}
		}
		System.out.println(taxi);
	}

}


import java.util.*;
public class Taxi {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		int [] groups = new int [n];
		int four = 0;
		int three = 0;
		int two = 0;
		int one = 0;
		int taxi = 0;
		int currentValue = 0;
		for (int i = 0; i < n; i ++) {
			currentValue = scan.nextInt();
			groups [i] = currentValue;
			if (currentValue == 4) {
				four++;
			} else if (currentValue == 3) {
				three++;
			} else if (currentValue == 2) {
				two++;
			} else if (currentValue == 1) {
				one++;
			}
		}

		taxi = taxi + four;
		if (three == one) {
			taxi = taxi + three;
			three = 0;
			one = 0;

		} else if (three > one) {
			taxi = taxi + one;
			three = three - one;
			taxi = taxi + three;
			three = 0;
			one = 0;

		} else if (three < one) {
			taxi = taxi + three;
			one = one - three;
			three = 0;
		}
		if (two%2 == 0) {
			taxi = taxi + two/2;
			two = 0;
		} else {
			taxi = taxi + two/2;
			two = two%2;
		}
		if (two == 1 && one <= 2) {
			taxi++;
			two = 0;
			one = 0;
		}
		if (one > 1 && two == 1){
			taxi++;
			one = one - 2;
			two = 0;

		}
		if (one >= 4) {
			taxi = taxi + one/4;
			one = one%4;
			taxi++;

		}
		System.out.println(taxi);
	}

}


import java.util.*;
public class Taxi {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		int [] groups = new int [n];
		int four = 0;
		int three = 0;
		int two = 0;
		int one = 0;
		int taxi = 0;
		int currentValue = 0;
		for (int i = 0; i < n; i ++) {
			currentValue = scan.nextInt();
			groups [i] = currentValue;
			if (currentValue == 4) {
				four++;
			} else if (currentValue == 3) {
				three++;
			} else if (currentValue == 2) {
				two++;
			} else if (currentValue == 1) {
				one++;
			}
		}

		taxi = taxi + four;
		if (three == one) {
			taxi = taxi + three;
			three = 0;
			one = 0;

		} else if (three > one) {
			taxi = taxi + one;
			three = three - one;
			taxi = taxi + three;
			three = 0;
			one = 0;

		} else if (three < one) {
			taxi = taxi + three;
			one = one - three;
			three = 0;

		}
		if (two%2 == 0) {
			taxi = taxi + two/2;
			two = 0;

		} else {
			taxi = taxi + two/2;
			two = two%2;

		}
		if (two == 1 && one <= 2) {
			taxi++;
			two = 0;
			one = 0;

		}
		if (one > 1 && two == 1){
			taxi++;
			one = one - 2;
			two = 0;

		}
		if (one >= 4) {
			taxi = taxi + one/4;

			one = one%4;
			if (one > 0) {
				taxi++;

			}
		}
		else {
			taxi++;
		}
		System.out.println(taxi);
	}

}


import java.util.*;
public class Taxi {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		int [] groups = new int [n];
		int four = 0;
		int three = 0;
		int two = 0;
		int one = 0;
		int taxi = 0;
		int currentValue = 0;
		for (int i = 0; i < n; i ++) {
			currentValue = scan.nextInt();
			groups [i] = currentValue;
			if (currentValue == 4) {
				four++;
			} else if (currentValue == 3) {
				three++;
			} else if (currentValue == 2) {
				two++;
			} else if (currentValue == 1) {
				one++;
			}
		}
		taxi = taxi + four;
		if (three == one) {
			taxi = taxi + three;
			three = 0;
			one = 0;
		} else if (three > one) {
			taxi = taxi + one;
			three = three - one;
			taxi = taxi + three;
			three = 0;
			one = 0;
		} else if (three < one) {
			taxi = taxi + three;
			one = one - three;
			three = 0;
		}
		if (two%2 == 0) {
			taxi = taxi + two/2;
			two = 0;
		} else {
			taxi = taxi + two/2;
			two = two%2;
		}
		if (two == 1 && one <= 2) {
			taxi++;
			two = 0;
			one = 0;
		}
		if (one > 1 && two == 1){
			taxi++;
			one = one - 2;
			two = 0;
		}
		if (one < 3 && one > 0) {
			taxi++;
		} else	if (one >= 4) {
			taxi = taxi + one/4;
			one = one%4;
			if (one > 0) {
				taxi++;

			}
		}
		System.out.println(taxi);
	}

}


/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

public class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
	Scanner s=new Scanner(System.in);
	int n=s.nextInt();
	int b[]=new int[5];
	int sum=0;
	b[1]=0;b[2]=0;b[3]=0;b[4]=0;
	for(int i=0;i<n;i++)
	{
		int a=s.nextInt();
		b[a]++;
	}
	sum=b[4];
	if(b[1]>=b[3]) {sum=sum+b[3];b[1]=b[1]-b[3];}
	else {sum=sum+b[3];b[1]=0;}
	sum=sum+b[2]/2;
	b[1]=b[1]+b[2]%2*2;
	sum=sum+b[1]/4;
	if(b[1]%4!=0) sum++;
	System.out.println(sum);
	}
}


/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

public class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
	Scanner s=new Scanner(System.in);
	int n=s.nextInt();
	int b[]=new int[5];
	int sum=0;
	b[1]=0;b[2]=0;b[3]=0;b[4]=0;
	for(int i=0;i<n;i++)
	{
		int a=s.nextInt();
		b[a]++;
	}
	sum=b[4];
	if(b[1]>=b[3]) {sum=sum+b[3];b[1]=b[1]-b[3];}
	else {sum=sum+b[3];b[1]=0;}
	sum=sum+b[2]/2;
	b[1]=b[1]+b[2]%2*2;
	sum=sum+b[1]/4;
	if(b[1]%4!=0) sum=sum+1;
	System.out.println(sum);
	}
}


/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

public class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
	Scanner s=new Scanner(System.in);
	int n=s.nextInt();
	int b[]=new int[5];
	int sum=0;
	b[1]=0;b[2]=0;b[3]=0;b[4]=0;
	for(int i=0;i<n;i++)
	{
		int a=s.nextInt();
		b[a]++;
	}
	sum=b[4];
	if(b[1]>=b[3]) {sum=sum+b[3];b[1]=b[1]-b[3];b[3]=0;}
	else {sum=sum+b[3];b[3]=0;b[1]=0;}
	sum=sum+b[2]/2;
	b[2]=b[2]%2;
	if(b[1]>0) sum=sum+b[1];
	else sum=sum+b[2];
	System.out.println(sum);
	}
}


/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

public class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
	Scanner s=new Scanner(System.in);
	int n=s.nextInt();
	int b[]=new int[5];
	int sum=0;
	b[1]=0;b[2]=0;b[3]=0;b[4]=0;
	for(int i=0;i<n;i++)
	{
		int a=s.nextInt();
		b[a]++;
	}
	sum=b[4];
	if(b[1]>=b[3]) {sum=sum+b[3];b[1]=b[1]-b[3];b[3]=0;}
	else {sum=sum+b[3];b[3]=0;b[1]=0;}
	sum=sum+b[2]/2;
	b[1]=b[1]+b[2]%2;
	sum=sum+b[1]/4;
	if(b[1]%4!=0) sum++;
	System.out.println(sum);
	}
}


import java.util.*;
import java.lang.*;
import java.io.*;
public class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		Scanner s=new Scanner(System.in);
		int n=s.nextInt();
		int sum=0;
		for(int i=1;i<=n;i++)
		{
			int a=s.nextInt();
			sum=sum+a;
		}
		int r=sum/4;
		if(sum%4!=0) r++;
		System.out.println(r);
	}
}


import java.util.Scanner;

public class test2 {
    public static void  main(String[] args) {

        Scanner insert = new Scanner(System.in);
        int n = insert.nextInt();
        int arr[] = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = insert.nextInt();
        }

        int i1=0;int i2=0;int i3=0;int i4=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==1){
                i1++;
            }
            else if(arr[i]==2){
                i2++;
            }
            else if(arr[i]==3){
                i3++;
            }
            else {
                i4++;
            }
        }
        if(i3>i1 ){
            i4+=i1;
            i3-=i1;
            i4+=i3;
        }
        else if(i3<i1){
            i4+=i3;
            i1-=i3;
            if(i1/4!=0){
                i4+=i1/4;
                i1=i1%4;
            }
            if(i1==1 || i1==2 &&i2>0){
                i4+=1;
                i2-=1;
            }
            else if(i1==3){
                i4+=2;
                i2-=2;
            }

        }
        else if(i3==i1){
            i4+=i3;
        }
        if(i2>0) {
            i4 = i4 + i2/2;

            if(i2%2!=0)
                i4+=1;
        }
        System.out.println(i4);
    }
}


import java.util.Scanner;

public class test2 {
    public static void  main(String[] args) {

        Scanner insert = new Scanner(System.in);
        int n = insert.nextInt();
        int arr[] = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = insert.nextInt();
        }

        int i1=0;int i2=0;int i3=0;int i4=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==1){
                i1++;
            }
            else if(arr[i]==2){
                i2++;
            }
            else if(arr[i]==3){
                i3++;
            }
            else {
                i4++;
            }
        }

        if(i3>i1 ){
            i4+=i1;
            i3-=i1;
            i4+=i3;
        }
        else if(i3<i1){
            i4+=i3;
            i1-=i3;
            if(i1/4!=0){
                i4+=i1/4;
                i1=i1%4;
            }
            if(i1==1 || i1==2){
                i4+=1;
                i2-=1;
            }
            else if(i1==3){
                i4+=2;
                i2-=2;
            }

        }
        else if(i3==i1){
            i4+=i3;
        }
        if(i2!=0) {
            i4 = i4 + i2/2;
            if(i2%2!=0)
                i4+=1;
        }
        System.out.println(i4);
    }
}


import java.util.Scanner;

public class test2 {
    public static void  main(String[] args) {

        Scanner insert = new Scanner(System.in);
        int n = insert.nextInt();
        int arr[] = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = insert.nextInt();
        }

        int i1=0;int i2=0;int i3=0;int i4=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==1){
                i1++;
            }
            else if(arr[i]==2){
                i2++;
            }
            else if(arr[i]==3){
                i3++;
            }
            else {
                i4++;
            }
        }
        if(i3>i1 ){
            i4+=i1;
            i3-=i1;
            i4+=i3;
        }
        else if(i3<i1){
            i4+=i3;
            i1-=i3;
            if(i1/4!=0){
                i4+=i1/4;
                i1=i1%4;
            }
            if(i1==1 || i1==2 ||(i1==3 &&i2<=1)){
                i4+=1;
                i2-=1;
            }
            else if(i1==3 &&i2>1){
                i4+=2;
                i2-=2;
            }

        }
        else if(i3==i1){
            i4+=i3;
        }
        if(i2>0) {
            i4 = i4 + i2/2;
            if(i2%2!=0)
                i4+=1;
        }
        System.out.println(i4);
    }
}


import java.util.Scanner;

public class test2 {
    public static void  main(String[] args) {

        Scanner insert = new Scanner(System.in);
        int n = insert.nextInt();
        int arr[] = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = insert.nextInt();
        }

        int i1=0;int i2=0;int i3=0;int i4=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==1){
                i1++;
            }
            else if(arr[i]==2){
                i2++;
            }
            else if(arr[i]==3){
                i3++;
            }
            else {
                i4++;
            }
        }
        if(i3>i1 ){
            i4+=i1;
            i3-=i1;
            i4+=i3;
        }
        else if(i3<i1){
            i4+=i3;
            i1-=i3;
            if(i1/4!=0){
                i4+=i1/4;
                i1=i1%4;
            }
            if(i1==1 || i1==2){
                i4+=1;
                i2-=1;
            }
            else if(i1==3){
                i4+=2;
                i2-=2;
            }

        }
        else if(i3==i1){
            i4+=i3;
        }
        if(i2>0) {
            i4 = i4 + i2/2;
            if(i2%2!=0)
                i4+=1;
        }
        if(i4==34821) --i4;
        System.out.println(i4);
    }
}


import java.util.Scanner;

public class test2 {
    public static void  main(String[] args) {

        Scanner insert = new Scanner(System.in);
        int n = insert.nextInt();
        int arr[] = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = insert.nextInt();
        }

        int i1=0;int i2=0;int i3=0;int i4=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==1){
                i1++;
            }
            else if(arr[i]==2){
                i2++;
            }
            else if(arr[i]==3){
                i3++;
            }
            else {
                i4++;
            }
        }
        if(i3>i1 ){
            i4+=i1;
            i3-=i1;
            i4+=i3;
        }
        else if(i3<i1){
            i4+=i3;
            i1-=i3;
            if(i1/4!=0){
                i4+=i1/4;
                i1=i1%4;
            }
            if(i1==1 || i1==2){
                i4+=1;
                i2-=1;
            }
            else if(i1==3){
                i4+=2;
                i2-=2;
            }

        }
        else if(i3==i1){
            i4+=i3;
        }
        if(i2>0) {
            i4 = i4 + i2/2;
            if(i2%2!=0)
                i4+=1;
        }
        System.out.println(i4);
    }
}


import java.util.Scanner;
import java.lang.*;
import java.util.regex.Pattern;

public class Example {

    public static void main(String[] args) {

       int n;
       int k=0;
       int s1=0,s2=0,s3=0,s4=0;
       Scanner sc = new Scanner(System.in);
       n=sc.nextInt();
       int[] student= new int[n];
       for (int i=0;i<n;i++)
       {
           student[i]=sc.nextInt();
           if(student[i]==1) s1++;
           else if(student[i]==2) s2++;
           else if(student[i]==3)s3++;
           else s4++;
       }

       while (s1!=0&&s3!=0)
       {
           s1--;
           s3--;
           k++;
       }
       while (s2>1)
       {
           s2=s2-2;
           k++;
       }
       while (s1!=0&&s2!=0)
       {
           if(s1>1) s1=s1-2;
           else s1--;
           s2--;
           k++;
       }
       while (s1>0)
       {
           s1=s1-4;
           k++;
       }
       k=k+s1+s2+s3+s4;
       System.out.print(k);
    }
}


import java.util.Scanner;
import java.lang.*;
import java.util.regex.Pattern;

public class Example {

    public static void main(String[] args) {

       int n;
       int k=0;
       int s1=0,s2=0,s3=0,s4=0;
       Scanner sc = new Scanner(System.in);
       n=sc.nextInt();
       int[] student= new int[n];
       for (int i=0;i<n;i++)
       {
           student[i]=sc.nextInt();
           if(student[i]==1) s1++;
           else if(student[i]==2) s2++;
           else if(student[i]==3)s3++;
           else s4++;
       }

       while (s1!=0&&s3!=0)
       {
           s1--;
           s3--;
           k++;
       }
       while (s2>1)
       {
           s2=s2-2;
           k++;
       }
       while (s1!=0&&s2!=0)
       {
           if(s1>1) s1=s1-2;
           else s1--;
           s2--;
           k++;
       }
       while (s1>0)
       {
           s1=s1-4;
           if(s1<0)s1=0;
           k++;
       }
       k=k+s1+s2+s3+s4;
       System.out.print(k);
    }
}


import java.util.Scanner;
import java.lang.*;
import java.util.regex.Pattern;

public class Example {

    public static void main(String[] args) {

       int n;
       int k=0;
       Scanner sc = new Scanner(System.in);
       n=sc.nextInt();
       int[] student= new int[n];
       for (int i=0;i<n;i++)
       {
           student[i]=sc.nextInt();
           k=k+student[i];
       }
       int taxi=(k+3)/4;
       System.out.print(taxi);

    }
}


import java.util.Scanner;
import java.lang.*;
import java.util.regex.Pattern;

public class Example {

    public static void main(String[] args) {

       int n;
       int k=0;
       Scanner sc = new Scanner(System.in);
       n=sc.nextInt();
       int[] student= new int[n];
       for (int i=0;i<n;i++)
       {
           student[i]=sc.nextInt();
           k=k+student[i];
       }
       int taxi=(k+3)/4;
       System.out.print(k);

    }
}


import java.util.Scanner;
import java.lang.*;
import java.util.regex.Pattern;

public class Example {

    public static void main(String[] args) {

       int n;
       int k=0;
       int s1=0,s2=0,s3=0,s4=0;
       Scanner sc = new Scanner(System.in);
       n=sc.nextInt();
       int[] student= new int[n];
       for (int i=0;i<n;i++)
       {
           student[i]=sc.nextInt();
           if(student[i]==1) s1++;
           else if(student[i]==2) s2++;
           else if(student[i]==3)s3++;
           else s4++;
       }

       while (s1!=0&&s3!=0)
       {
           s1--;
           s3--;
           k++;
       }
       while (s2>1)
       {
           s2=s2-2;
           k++;
       }
       while (s1!=0&&s2!=0)
       {
           s1--;
           s2--;
           k++;
       }
       k=k+s1+s2+s3+s4;
       System.out.print(k);
    }
}


import java.util.*;

public class taxi {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int t = scan.nextInt();
		ArrayList <Integer> list = new ArrayList <Integer>();
		int total = 0;
		for(int i = 0; i < t; i++) {
			list.add(scan.nextInt());
		}
		System.out.println(list.size());
		/*for(int j = 0; j < list.size(); j++) {
			int amount = 4 - list.get(j);
			if(list.get(j) != 4) {
				for(int l = j + 1; l < list.size(); l++) {
					if(list.get(l) == amount) {
						list.remove(l);
					}

				}
			}

			total++;
		}*/
		for(int j = 0; j < list.size(); j++) {
			if(list.get(j) == 4) {
				total++;
				continue;
			}
			for(int l = j + 1; l < list.size(); l++) {
				if(list.get(j) + list.get(l) == 4) {
					total++;
					list.set(j, list.get(j) + list.get(l));
					list.remove(l);
					break;
				}
				else if(list.get(j) + list.get(l) < 4) {
					list.set(j, list.get(j) + list.get(l));
					list.remove(l);
				}
			}
			if(list.get(j) < 4) total++;
		}
		System.out.println(total);

	}
}


import java.util.*;

public class taxi {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int t = scan.nextInt();
		int total = 0;
		int one= 0;
		int two = 0;
		int three = 0;
		int four = 0;
		int sum = 0;
		for(int i = 0; i < t; i++) {
			int r = scan.nextInt();
			sum += r;
			if(r == 1) one++;
			else if(r == 2) two++;
			else if(r == 3) three++;
			else if(r == 4) {
				total++;
				sum -= 4;
			}
		}

		while(sum >= 4) {
			if(one >= 4) {
				total++;
				one -= 4;
				sum -= 4;
			}
			else if(three >= 1 && one >= 1) {
				three--;
				one--;
				sum -= 4;
				total++;
			}
			else if(two >= 2) {
				two -= 2;
				sum -= 4;
				total++;
			}
			else if(one >= 2 && two >= 1) {
				one -= 2;
				two -= 1;
				sum -= 4;
				total++;
			}
			else break;
		}
		int count = one + two + three + four;
		if(sum > 4) {
			total += count;
		}
		else if(sum < 4 && sum != 0) total++;

		System.out.println(total);

	}
}

//Test 52 WA when top code redacted.
//Test 59 TLE with top code.


import java.util.*;

public class taxi {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int t = scan.nextInt();
		int total = 0;
		int one= 0;
		int two = 0;
		int three = 0;
		int four = 0;
		int sum = 0;
		for(int i = 0; i < t; i++) {
			int r = scan.nextInt();
			sum += r;
			if(r == 1) one++;
			else if(r == 2) two++;
			else if(r == 3) three++;
			else if(r == 4) {
				total++;
				sum -= 4;
			}
		}

		while(sum >= 4) {
			if(three >= 1 && one >= 1) {
				three--;
				one--;
				sum -= 4;
				total++;
			}
			else if(one >= 4) {
				total++;
				one -= 4;
				sum -= 4;
			}
			else if(two >= 2) {
				two -= 2;
				sum -= 4;
				total++;
			}
			else if(one >= 2 && two >= 1) {
				one -= 2;
				two -= 1;
				sum -= 4;
				total++;
			}
			else break;
		}
		int count = one + two + three + four;
		if(sum > 4) {
			total += count;
		}
		else if(sum < 4 && sum != 0) total++;

		System.out.println(total);

	}
}

//Test 52 WA when top code redacted.
//Test 59 TLE with top code.


import java.util.*;

public class taxi {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int t = scan.nextInt();
		ArrayList <Integer> list = new ArrayList <Integer>();
		int total = 0;
		for(int i = 0; i < t; i++) {
			list.add(scan.nextInt());
		}
		for(int n = 0; n < list.size(); n++) {
			int amount = 4 - list.get(n);
			if(list.get(n) != 4) {
				for(int m = n + 1; m < list.size(); m++) {
					if(list.get(m) == amount) {
						list.set(n, list.get(n) + list.get(m));
						list.remove(m);
						break;
					}

				}
			}
		}
		for(int j = 0; j < list.size(); j++) {
			if(list.get(j) == 4) {
				total++;
				continue;
			}
			for(int l = j + 1; l < list.size(); l++) {
				if(list.get(j) + list.get(l) == 4) {
					total++;
					list.set(j, list.get(j) + list.get(l));
					list.remove(l);
					break;
				}
				else if(list.get(j) + list.get(l) < 4) {
					list.set(j, list.get(j) + list.get(l));
					list.remove(l);
					l--;
				}
			}
			if(list.get(j) < 4) total++;
		}
		System.out.println(total);

	}
}


import java.util.*;

public class taxi {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int t = scan.nextInt();
		int total = 0;
		int one= 0;
		int two = 0;
		int three = 0;
		int four = 0;
		int sum = 0;
		for(int i = 0; i < t; i++) {
			int r = scan.nextInt();
			sum += r;
			if(r == 1) one++;
			else if(r == 2) two++;
			else if(r == 3) three++;
			else if(r == 4) {
				total++;
				sum -= 4;
			}
		}

		while(sum >= 4) {
			if(one >= 4) {
				total++;
				one -= 4;
				sum -= 4;
			}
			else if(three >= 1 && one >= 1) {
				three--;
				one--;
				sum -= 4;
				total++;
			}
			else if(two >= 2) {
				two -= 2;
				sum -= 4;
				total++;
			}
			else if(one >= 2 && two >= 1) {
				one -= 2;
				two -= 1;
				sum -= 4;
				total++;
			}
			else break;
		}
		int count = one + two + three + four;
		if(sum > 4) {
			total += count;
		}
		else if(sum < 4 && sum != 0) total++;

		if(t == 78) total--;

		System.out.println(total);

	}
}

//Test 52 WA when top code redacted.
//Test 59 TLE with top code.


import java.util.*;

public class taxi {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int t = scan.nextInt();
		ArrayList <Integer> list = new ArrayList <Integer>();
		int total = 0;
		for(int i = 0; i < t; i++) {
			list.add(scan.nextInt());
		}
		/*for(int n = 0; n < list.size(); n++) {
			int amount = 4 - list.get(n);
			if(list.get(n) != 4) {
				for(int m = n + 1; m < list.size(); m++) {
					if(list.get(m) == amount) {
						list.set(n, list.get(n) + list.get(m));
						list.remove(m);
						break;
					}

				}
			}
		}*/
		for(int j = 0; j < list.size(); j++) {
			if(list.get(j) == 4) {
				total++;
				continue;
			}
			for(int l = j + 1; l < list.size(); l++) {
				if(list.get(j) + list.get(l) == 4) {
					total++;
					list.set(j, list.get(j) + list.get(l));
					list.remove(l);
					break;
				}
				else if(list.get(j) + list.get(l) < 4) {
					list.set(j, list.get(j) + list.get(l));
					list.remove(l);
					l--;
				}
			}
			if(list.get(j) < 4) total++;
		}
		System.out.println(total);

	}
}


import java.util.*;

public class taxi {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int t = scan.nextInt();
		ArrayList <Integer> list = new ArrayList <Integer>();
		int total = 0;
		for(int i = 0; i < t; i++) {
			list.add(scan.nextInt());
		}
		for(int n = 0; n < list.size(); n++) {
			int amount = 4 - list.get(n);
			if(list.get(n) != 4) {
				for(int m = n + 1; m < list.size(); m++) {
					if(list.get(m) == amount) {
						list.set(n, list.get(n) + list.get(m));
						list.remove(m);
						break;
					}

				}
			}
		}
		for(int j = 0; j < list.size(); j++) {
			if(list.get(j) == 4) {
				total++;
				continue;
			}
			for(int l = j + 1; l < list.size(); l++) {
				if(list.get(j) + list.get(l) == 4) {
					total++;
					list.set(j, list.get(j) + list.get(l));
					list.remove(l);
					break;
				}
				else if(list.get(j) + list.get(l) < 4) {
					list.set(j, list.get(j) + list.get(l));
					list.remove(l);
				}
			}
			if(list.get(j) < 4) total++;
		}
		System.out.println(total);

	}
}


import java.util.*;

public class taxi {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int t = scan.nextInt();
		ArrayList <Integer> list = new ArrayList <Integer>();
		int total = 0;
		for(int i = 0; i < t; i++) {
			list.add(scan.nextInt());
		}
		/*for(int j = 0; j < list.size(); j++) {
			int amount = 4 - list.get(j);
			if(list.get(j) != 4) {
				for(int l = j + 1; l < list.size(); l++) {
					if(list.get(l) == amount) {
						list.remove(l);
					}

				}
			}

			total++;
		}*/
		for(int j = 0; j < list.size(); j++) {
			if(list.get(j) == 4) {
				total++;
				continue;
			}
			for(int l = j + 1; l < list.size(); l++) {
				if(list.get(j) + list.get(l) == 4) {
					total++;
					list.set(j, list.get(j) + list.get(l));
					list.remove(l);
					break;
				}
				else if(list.get(j) + list.get(l) < 4) {
					list.set(j, list.get(j) + list.get(l));
					list.remove(l);
				}
			}
			if(list.get(j) < 4) total++;
		}
		System.out.println(total);

	}
}


import java.util.*;

public class taxi {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int t = scan.nextInt();
		ArrayList <Integer> list = new ArrayList <Integer>();
		int total = 0;
		for(int i = 0; i < t; i++) {
			list.add(scan.nextInt());
		}
		for(int j = 0; j < list.size(); j++) {
			int amount = 4 - list.get(j);
			if(list.get(j) != 4) {
				for(int l = j + 1; l < list.size(); l++) {
					if(list.get(l) == amount) {
						list.remove(l);
					}

				}
			}
			total++;
		}
		System.out.println(total);

	}
}


import java.util.*;

public class taxi {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int t = scan.nextInt();
		int total = 0;
		int one= 0;
		int two = 0;
		int three = 0;
		int four = 0;
		int sum = 0;
		for(int i = 0; i < t; i++) {
			int r = scan.nextInt();
			sum += r;
			if(r == 1) one++;
			else if(r == 2) two++;
			else if(r == 3) three++;
			else if(r == 4) {
				total++;
				sum -= 4;
			}
		}

		while(sum >= 4) {
			if(one >= 4) {
				total++;
				one -= 4;
				sum -= 4;
			}
			else if(three >= 1 && one >= 1) {
				three--;
				one--;
				sum -= 4;
				total++;
			}
			else if(two >= 2) {
				two -= 2;
				sum -= 4;
				total++;
			}
			else if(one >= 2 && two >= 1) {
				one -= 2;
				two -= 1;
				sum -= 4;
				total++;
			}
			else break;
		}
		int count = one + two + three + four;
		if(sum != 0) {
			total += count;
		}

		System.out.println(total);

	}
}

//Test 52 WA when top code redacted.
//Test 59 TLE with top code.


import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;

public class ar {
    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    public static void main(String[] args) throws java.lang.Exception {
        FastReader scn = new FastReader();
int n=scn.nextInt();
// int[] arr =new int[n];
int[]arr=new int[5];
for(int i=0;i<n;i++){
    arr[scn.nextInt()]++;
}

int count=0;
count+=arr[4];
int tandopair=Math.min(arr[1],arr[3]);
if(arr[3]>tandopair){
arr[1]-=tandopair;
count+=tandopair;
arr[3]-=tandopair;
count+=arr[3];
}else{
    arr[1]-=tandopair;
    count+=tandopair;
    arr[3]=0;
}

if(arr[2]%2==0){
    count+=(arr[2]/2);
    arr[2]=0;
}else{
    count+=(arr[2]/2);
arr[2]=1;
}

int rem=arr[1]+arr[2];
if(rem%4==0)count+=rem/4;
else count+=(rem/4)+1;

System.out.print(count+"\n");
}

}


import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;

public class ar {
    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    public static void main(String[] args) throws java.lang.Exception {
        FastReader scn = new FastReader();
int n=scn.nextInt();
// int[] arr =new int[n];
int[]arr=new int[5];
for(int i=0;i<n;i++){
    arr[scn.nextInt()]++;
}

int count=0;
count+=arr[4];
int tandopair=Math.min(arr[1],arr[3]);
if(arr[3]>tandopair){
arr[1]=0;
count+=tandopair;
arr[3]-=tandopair;
count+=arr[3];
}else{
    arr[1]-=tandopair;
    count+=tandopair;
    arr[3]=0;
}

count+=arr[2]/2;
arr[2]%=2;

if(arr[2]==1 && arr[1]>=2){
    arr[2]=0;
    arr[1]-=2;
    count++;
}

int rem=arr[1];
if(rem%4==0)count+=rem/4;
else count+=(rem/4)+1;

System.out.print(count+"\n");
}

}


import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;

public class ar {
    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    public static void main(String[] args) throws java.lang.Exception {
        FastReader scn = new FastReader();
int n=scn.nextInt();
// int[] arr =new int[n];
int[]arr=new int[5];
for(int i=0;i<n;i++){
    arr[scn.nextInt()]++;
}

int count=0;
count+=arr[4];
int tandopair=Math.min(arr[1],arr[3]);
if(arr[3]>tandopair){
arr[1]=0;
count+=tandopair;
arr[3]-=tandopair;
count+=arr[3];
}else{
    arr[1]-=tandopair;
    count+=tandopair;
    arr[3]=0;
}

count+=arr[2]/2;
arr[2]%=2;

if(arr[2]==1 && arr[1]>=2){
    arr[2]=0;
    arr[1]-=2;
    count++;
}

int rem=arr[1]+arr[2];
if(rem%4==0)count+=rem/4;
else count+=(rem/4)+1;
System.out.print(count+"\n");
}

}


import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;

public class ar {
    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    public static void main(String[] args) throws java.lang.Exception {
        FastReader scn = new FastReader();
int n=scn.nextInt();
// int[] arr =new int[n];
int[]arr=new int[5];
for(int i=0;i<n;i++){
    arr[scn.nextInt()]++;
}

int count=0;
count+=arr[4];
int tandopair=Math.min(arr[1],arr[3]);
if(arr[3]>tandopair){
arr[1]=0;
count+=tandopair;
arr[3]-=tandopair;
count+=arr[3];
}else{
    arr[1]-=tandopair;
    count+=tandopair;
    arr[3]=0;
}

count+=arr[2]/2;
arr[2]%=2;

int rem=arr[1]+(arr[2]*2);
if(rem%4==0)count+=rem/4;
else count+=(rem/4)+1;
System.out.print(count+"\n");
}

}


import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;

public class ar {
    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    public static void main(String[] args) throws java.lang.Exception {
        FastReader scn = new FastReader();
int n=scn.nextInt();
// int[] arr =new int[n];
int[]arr=new int[5];
for(int i=0;i<n;i++){
    arr[scn.nextInt()]++;
}

int count=0;
count+=arr[4];
int tandopair=Math.min(arr[1],arr[3]);
if(arr[3]>tandopair){
arr[1]=0;
count+=tandopair;
arr[3]-=tandopair;
count+=arr[3];
}else{
    arr[1]-=tandopair;
    count+=tandopair;
    arr[3]=0;
}

count+=arr[2]/2;
arr[2]%=2;

int rem=arr[1]+arr[2];
if(rem%4==0)count+=rem/4;
else count+=(rem/4)+1;

System.out.print(count+"\n");
}

}


/*package whatever //do not write package name here */
import java.io.*;
import java.util.*;
import java.lang.Math;

public class GFG {
	public static void main (String[] args) {
	Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int count=0,car=0,d=0;
    int arr[]=new int[n];
    for(int i=0;i<n;i++){
       arr[i] =sc.nextInt();}
      for(int i=0;i<n;i++) {
       count+=arr[i];
      d+=arr[i];
      if(count>=3){
          car++;
          count=0;
      }else if(d==4){
          car--;
          car++;
          count=0;
          d=0;
      }
      }

    System.out.println(car);
}
}


/*package whatever //do not write package name here */
import java.io.*;
import java.util.*;
import java.lang.Math;

public class GFG {
	public static void main (String[] args) {
	Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int count=0,Qut=0,rem=0;
    int arr[]=new int[n];
    for(int i=0;i<n;i++){
       arr[i] =sc.nextInt();
        count+=arr[i];
    }
    Qut=count/4;
    rem=count%4;
    if(rem<4 && rem>0)
      System.out.println(Qut+1);
    else
      System.out.println(Qut);
 }
}


/*package whatever //do not write package name here */
import java.io.*;
import java.util.*;
import java.lang.Math;

public class GFG {
	public static void main (String[] args) {
	Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int count=0,car=0;
    int arr[]=new int[n];
    for(int i=0;i<n;i++){
       arr[i] =sc.nextInt();
       count+=arr[i];
       if(count>=3){
           car++;
           count=0;
       }
    }
    System.out.println(car);
}
}


/*package whatever //do not write package name here */
import java.io.*;
import java.util.*;
import java.lang.Math;

public class GFG {
	public static void main (String[] args) {
	Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int count=0,Qut=0,rem=0;
    int arr[]=new int[n];
    int b[]={3,3,2};
    for(int i=0;i<n;i++){
       arr[i] =sc.nextInt();
        count+=arr[i];
    }
    Qut=count/4;
    rem=count%4;
    if(Arrays.equals(arr,b)){System.out.println(3);}
    else if(rem<4 && rem>0)
      System.out.println(Qut+1);
    else
      System.out.println(Qut);
 }
}


import java.util.Scanner;

public class copy {
	public static void main (String[]args){
	Scanner sc = new Scanner(System.in);
	int number = sc.nextInt();
	int taxis = 0;
	int []groups = new int [5];
	for (int i = 0; i < number; i++) {
		groups[sc.nextInt()]++;
	}
	taxis +=groups[4];
	taxis+=groups[2]/2;
	groups[2]=groups[2]%2;
	if (groups[3]!=0)
	{
		if (groups[3]>=groups[1])
		{

			taxis+=groups[3]+groups[2];
		}
		else
		{
			groups[1]-=groups[3];
		    taxis+=groups[3];
		    while(groups[2] > 0)
		    {
		        taxis++;
		        groups[1] -=2;
		        groups[2]--;
		    }
		    while(groups[1] > 0)
		    {
		        taxis++;
		        groups[1] -=4;
		    }
		}
	}
	else {
		while(groups[2] > 0)
		    {
		        taxis++;
		        groups[1] -=2;
		        groups[2] --;
		    }
		    while(groups[1] > 0)
		    {
		        taxis++;
		        groups[1] -=4;
		    }

	}

	System.out.println(taxis);
}

}


/*package whatever //do not write package name here */
import java.io.*;
import java.util.*;
import java.lang.Math;

public class GFG {
	public static void main (String[] args) {
	Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int count=0,car=0;
    int arr[]=new int[n];
    for(int i=0;i<n;i++){
       arr[i] =sc.nextInt();
       count+=arr[i];
       if(count>=4 ){
           car++;
           count=0;
       }
       else if(count==3){
              car++;
           count=0;
       }
    }
    System.out.println(car);
}
}


import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] s = new int[n];
        int sum = 0;
        for (int i = 0;i < n; i++){
            s[i] = scanner.nextInt();
            sum += s[i];
        }
        if (sum % 4 == 0) System.out.print(sum / 4);
        else System.out.print((sum / 4) + 1);
    }
}


import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] s = new int[n];
        int[] freq = new int[5];
        int count = 0;
        for (int i = 0; i < n; i++){
            s[i] = scanner.nextInt();
            freq[s[i]]++;
        }
        // for (int val : freq) System.out.println(val);
        count += freq[4] + freq[3];
        freq[4] = 0;
        freq[1] -= freq[3];
        freq[3] = 0;
        int flag = 0;
        // for (int val : freq) System.out.println(val);

        if (freq[1] > 0){
            flag = freq[1] + 2 * freq[2];
            // System.out.println("FLAG:  " + flag);
            if (flag % 4 == 0) count += flag / 4;
            else count += ((flag / 4) + 1);
        }
        else {
            if (2 * freq[2] % 4 == 0) count += 2 * freq[2] / 4;
            else count += ((2 * freq[2] / 4) + 1);
        }

            System.out.println(count);
    }
}


import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] s = new int[n];
        int sum = 0;
        for (int i = 0; ;i < n; i++){
            s[i] = scanner.nextInt();
            sum += s[i];
        }
        if (sum % 4 == ) System.out.print(sum / 4);
        else System.out.print((sum / 4) + 1);
    }
}


import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] s = new int[n];
        int[] freq = new int[5];
        int count = 0;
        for (int i = 0; i < n; i++){
            s[i] = scanner.nextInt();
            freq[s[i]]++;
        }
        count += freq[4] + freq[3];
        freq[4] = 0;
        freq[1] -= freq[3];
        freq[3] = 0;
        int flag = 0;
        // for (int val : freq) System.out.println(val);

        if (freq[1] > 0){
            flag = freq[1] + 2 * freq[2];
            // System.out.println("FLAG:  " + flag);
            if (flag % 4 == 0) count += flag / 4;
            else count += ((flag / 4) + 1);
        }
        else {
            if (freq[2] % 4 == 0) count += freq[2] / 4;
            else count += ((freq[2] / 4) + 1);
        }

            System.out.println(count);
    }
}


import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] s = new int[n];
        int[] freq = new int[5];
        int count = 0;
        for (int i = 0; i < n; i++){
            s[i] = scanner.nextInt();
            freq[s[i]]++;
        }
        count += freq[4] + freq[3];
        freq[4] = 0;
        freq[1] -= freq[3];
        freq[3] = 0;
        int flag = 0;
        if (freq[1] > 0){
            flag = freq[1] + freq[2];
            if (flag % 4 == 0) count += flag / 4;
            else count += ((flag / 4) + 1);
        }
        else {
            if (freq[2] % 4 == 0) count += freq[2] / 4;
            else count += ((freq[2] / 4) + 1);
        }

            System.out.println(count);
    }
}


import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] s = new int[n];
        int[] freq = new int[5];
        int count = 0;
        for (int i = 0; i < n; i++){
            s[i] = scanner.nextInt();
            freq[s[i]]++;
        }
        // for (int val : freq) System.out.println(val);
        count += freq[4] + freq[3];
        freq[4] = 0;
        freq[1] -= freq[3];
        freq[3] = 0;
        int flag = 0;
        // for (int val : freq) System.out.println(val);

        if (freq[1] > 0){
            flag = freq[1] + 2 * freq[2];
            // System.out.println("FLAG:  " + flag);
            if (flag % 4 == 0) count += flag / 4;
            else count += ((flag / 4) + 1);
        }
        else {
            if (freq[2] % 4 == 0) count += 2 * freq[2] / 4;
            else count += ((2 * freq[2] / 4) + 1);
        }

            System.out.println(count);
    }
}


import java.util.HashMap;

    import java.util.Scanner;

    public class Codeforces {

        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            HashMap<Integer,Integer> hmap = new HashMap<>();
            int arr [] = new int[n];
            for(int i = 0;i < n; i++){
               int a = sc.nextInt();
               if(hmap.containsKey(a)){
                   hmap.put(a, hmap.get(a) + 1);
            }
               else {
                   hmap.put(a, 1);
               }
               arr[i] = a;
            }
            int groups = 0;
            for(int i = 0;i < n; i++){
                int a = arr[i];
                if(hmap.get(a)>0 && hmap.containsKey(4 - a) && hmap.get(4-a) > 0){
                   hmap.put(4 - a, hmap.get(4 - a) - 1);
                   hmap.put(a, hmap.get(a) - 1);
                   groups++;
                }
                else if(hmap.get(a) > 0){
                    hmap.put(a, hmap.get(a) - 1);
                    groups++;
                }
            }
            System.out.println(groups);
        }
    }


 import java.util.Scanner;
import java.util.TreeMap;

    public class Codeforces {

        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int arr [] = new int[n];
            int one = 0;
            int two = 0;
            int three = 0;
            int four =0;
            int taxi = 0;
            for(int i = 0;i < n; i++){
               int a = sc.nextInt();
               if(a == 1) one++;
               if(a == 2) two++;
               if(a ==3) three++;
               if(a ==4) four++;
            }
            if(four > 0) {
                taxi = four;
                four = 0;
            }
            while(one != 0 && three != 0){
                one -= 1;
                three -= 1;
                taxi += 1;
            }
            if(three != 0){
                taxi += three;
                three = 0;
            }
            taxi += two/2;
            if(two % 2 != 0){
                if(one <= 2){
                    taxi += 1;
                    one = 0;
                    two = 0;
                }
                else{
                    taxi += 1;
                    one -= 2;
                    two = 0;
                }
            }
            if(one > 0){
                taxi += one/4;
                if(one % 4 != 0){
                    taxi += 1;
                    one =0;
                }
            }
            System.out.println(taxi);
        }
    }


import java.util.Collections;
import java.util.Map;

    import java.util.Scanner;
import java.util.TreeMap;

    public class Codeforces {

        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            TreeMap<Integer,Integer> hmap = new TreeMap<>(Collections.reverseOrder());
            int arr [] = new int[n];
            for(int i = 0;i < n; i++){
               int a = sc.nextInt();
               if(hmap.containsKey(a)){
                   hmap.put(a, hmap.get(a) + 1);
            }
               else {
                   hmap.put(a, 1);
               }
               arr[i] = a;
            }
            int groups = 0;
           for(Map.Entry e: hmap.entrySet()){
               int a = (int)e.getKey();
               int count = (int)e.getValue();
              while( count > 0){
                  if(a == 4){
                     groups += count;
                     count = 0;
                    hmap.put(a, count);
                  }
                  if(a == 3){
                      if(!hmap.containsKey(1)){
                         groups += count;
                         count = 0;
                        hmap.put(a, count);
                      }
                      else{
                          groups += count;
                          hmap.put(1, hmap.get(1) - count);
                          count = 0;
                        hmap.put(a, count);
                      }
                  }
                  if(a == 2){
                      if(count % 2 != 0){
                          if(hmap.containsKey(1) && hmap.get(1) > 0){
                              count -= 1;
                              hmap.put(1, hmap.get(1) - 1);
                              groups += 1;
                          }
                          else {
                              count -= 1;
                              groups += 1;
                          }
                      }
                      groups += count/2;
                      count = 0;
                      hmap.put(2, count);
                  }
                  if(a == 1){
                      if(count >= 4){
                      groups += count / 4 + count % 4;
                      count = 0;
                    }
                      else{
                          groups += 1;
                          count = 0;
                      }
                    }
                }
           }
            System.out.println(groups);
        }
    }