#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;
}