← Home
// LUOGU_RID: 102220696
#include<bits/stdc++.h>
using namespace std;
int n,ans,x,a,b,c,p[4];
multiset<int> s;
int F(int x){
	auto it=s.upper_bound(x);
	if (it==s.begin()) return 0;
	s.erase(--it); return 1;
}
int main(){
	scanf("%d%d%d%d",&n,&p[1],&p[2],&p[3]);
	sort(p+1,p+4),a=p[1],b=p[2],c=p[3];
	for (int i=1; i<=n; i++){
		scanf("%d",&x); s.insert(x);
		if (x>a+b+c) return puts("-1"),0;
	}
	while (!s.empty()){
		int mx=*s.rbegin(); ans++;
		s.erase(s.find(mx));
		if (mx<=c){
			if (F(b)) F(a);
			else F(a+b);
		} else if (mx<=a+b) F(c);
		else if (mx<=a+c) F(b);
		else if (mx<=b+c) F(a);
	}
	printf("%d\n",ans);
}