#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:32505856")
template <class T>
inline T sqr(T a) {
  return a * a;
}
template <class T>
inline void gmin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline void gmax(T &a, T b) {
  if (a < b) a = b;
}
inline int sign(const double &a) { return a > 1e-9 ? 1 : (a < -1e-9 ? -1 : 0); }
struct Initializer {
  Initializer() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
  }
  ~Initializer() {}
} initializer;
int F[2][100000 + 1 << 1];
int main() {
  int n, l, m, r;
  cin >> n >> l >> m >> r;
  int a = r * 2, b = l;
  F[0 & 1][0 + 100000] = 1;
  for (int i = 1; i <= n; i++) {
    int w;
    cin >> w;
    memset(F[i & 1], 0, sizeof(F[i & 1]));
    for (int j = -m * 2; j <= m * 2; j++)
      if (F[i - 1 & 1][j + 100000]) {
        if (j + a * w <= m * 2) {
          F[i & 1][j + a * w + 100000] = 1;
          F[i & 1][min(j + b * w, m * 2) + 100000] = 1;
        }
        if (j - a * w >= -m * 2) {
          F[i & 1][j - a * w + 100000] = 1;
          F[i & 1][max(j - b * w, -m * 2) + 100000] = 1;
        }
      }
  }
  for (int i = -m * 2; i <= m * 2; i++)
    if (F[n & 1][i + 100000]) return puts("Yes"), 0;
  puts("No");
  return 0;
}
