← Home
#include <bits/stdc++.h>
#define fast ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
 
int n, a, b, c, mx, ans;
multiset<int> s;
int main() {
    fast;
    cin >> n >> a >> b >> c;
    if (c > b) swap(c, b);
    if (b > a) swap(b, a);
    if (c > b) swap(c, b);
    for (int i = 1, t; i <= n; ++i) {
        cin >> t; mx = max(mx, t);
        s.insert(t);
    }
    if (mx > a + b + c) cout << -1, exit(0);
    while (s.size() && *--s.end() > a + b) ans++, s.erase(--s.end());
    while (s.size() && *--s.end() > a + c) {
        ans++, s.erase(--s.end());
        if (s.size() && s.upper_bound(c) != s.begin())
            s.erase(--s.upper_bound(c));
    }
    while (s.size() && *--s.end() > max(a, b+c)) {
        ans++, s.erase(--s.end());
        if (s.size() && s.upper_bound(b) != s.begin())
            s.erase(--s.upper_bound(b));
    }
    if (b + c > a) {
        while (s.size() && *--s.end() > a) {
            ans++, s.erase(--s.end());
            if (s.size() && s.upper_bound(a) != s.begin())
                s.erase(--s.upper_bound(a));
        }
    }
    int a1 = 0, b1 = 0, c1 = 0, k = 0;
    for (auto x : s) {
        if (x > b) a1++;
        else if (x > c) b1++;
        else c1++;
    }
    if (b + c > a) k = a1;
    else {
        for (auto x : s)
            if (x > b && x <= b + c) k++;
    }
    if (c1 > b1) {
        int d = (c1 - b1)/2;
        c1 -= d; b1 += d;
    }
    if (b1 >= a1) ans += max((b1+a1+1)/2, (b1+c1+a1+2)/3);
    else {
        int d = min((a1-b1)/2, k);
        a1 -= d, b1 += d;
        ans += max(a1, b1);
    }
    cout << ans;
    return 0;
}