#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#define PII pair<int, int>
#define SIZE(x) ((int) x.size())
using namespace std;
int main()
{
	int N, M, L, R;
	scanf("%d%d%d%d", &N, &L, &M, &R);
	R *=2; L *= 2; M *= 2;
	int l = R, r = L / 2;
	vector<PII> las, cur;
	las.push_back(PII(0, 0));
	for (int i = 1; i <= N; ++ i)
	{
		int m;
		scanf("%d", &m);
		cur.clear();
		int c = m * l, d = m * r;
		for (int i = 0; i < SIZE(las); ++ i)
		{
			int a = las[i].first, b = las[i].second;
			int q = a + c, w = min(b + d, M);
			if (q <= w) cur.push_back(PII(q, w));
			q = max(a - d, -M); w = b - c;
			if (q <= w) cur.push_back(PII(q, w));
		}
		sort(cur.begin(), cur.end());
		las.clear();
		for (int j = 0; j < SIZE(cur); ++ j)
		{
			if (SIZE(las) == 0 || las[SIZE(las) - 1].second < cur[j].first)
			{
				las.push_back(cur[j]);
			}
			else
			{
				las[SIZE(las) - 1].second = max(las[SIZE(las) - 1].second, cur[j].second);
			}
		}
		/*for (int i = 0; i < SIZE(las); ++ i)
		{
			printf("%d %d\n", las[i].first, las[i].second);
		}
		printf("-----\n")*/;
	}
	bool flag = false;
	for (int i = 0; i < SIZE(las); ++ i)
	{
		//printf("%d %d\n", las[i].first, las[i].second);
		if (las[i].first <= M || las[i].second >= -M)
		{
			flag = true;
			break;
		}
	}
	if (flag) puts("Yes"); else puts("No");
	return 0;
}