#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
long long L, M, R;
pair <long long, long long> maintain(long long l, long long r)
{
	if (l >= 0)
		return make_pair(l, min(M, r));
	else if (r <= 0)
		return make_pair(-r, min(M, -l));
	else
		return make_pair(0, min(M, max(r, -l)));
}
vector <pair <long long, long long> > maintain(vector <pair <long long, long long> > b)
{
	vector <pair <long long, long long> > ret, a;
	int n = b.size();
	for (int i = 0; i < n; ++ i)
		if (b[i].first <= b[i].second)
			a.push_back(b[i]);
	if (a.empty())
		return a;
	sort(a.begin(), a.end());
	n = a.size();
	ret.push_back(a.front());
	for (int i = 1; i < n; ++ i)
		if (a[i].first <= ret.back().second)
			ret.back().second = max(ret.back().second, a[i].second);
		else
			ret.push_back(a[i]);
	return ret;
}
vector <pair <long long, long long> > add(vector <pair <long long, long long> > a, long long x)
{
	vector <pair <long long, long long> > ret;
	int n = a.size();
	for (int i = 0; i < n; ++ i)
	{
		long long l = a[i].first, r = a[i].second;
		ret.push_back(maintain(l + x * R, r + x * L));
		ret.push_back(maintain(l - x * L, r - x * R));
	}
	return maintain(ret);
}
int main()
{
	int n;
	scanf("%d%lld%lld%lld", &n, &L, &M, &R);
	R *= 2;
	M *= 2;
	vector <pair <long long, long long> > now;
	now.push_back(make_pair(0, 0));
	for (int i = 0; i < n; ++ i)
	{
		long long x;
		scanf("%lld", &x);
		now = add(now, x);
		if (now.empty())
		{
			puts("No");
			return 0;
		}
	}
	puts("Yes");
	return 0;
}