#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const int N = 100010;
int n;
double L;
double M;
double R;
int cmp(double x) {
  if (fabs(x) < eps)
    return 0;
  else if (x > 0)
    return 1;
  return -1;
}
struct Seg {
  double l, r;
  Seg(double a, double b) : l(a), r(b) {}
  bool operator<(const Seg t) const { return l < t.l; }
  Seg() {}
};
struct Nod {
  Seg seg[N];
  int tot;
  void ini() { tot = 0; }
  void ins(Seg x) {
    if (cmp(x.l - M) > 0 || cmp(x.r + M) < 0) return;
    x.l = max(-M, x.l);
    x.r = min(M, x.r);
    if (tot == 0) {
      seg[tot++] = x;
    } else {
      if (x.l <= seg[tot - 1].r) {
        seg[tot - 1].r = max(seg[tot - 1].r, min(x.r, M));
      } else {
        seg[tot++] = x;
      }
    }
  }
} pre, cur;
double val[N];
Seg tmp[N];
int cnt;
int main() {
  cin >> n >> L >> M >> R;
  for (int i = 0; i < n; ++i) {
    cin >> val[i];
  }
  pre.ini();
  pre.ins(Seg(M, M));
  for (int i = 0; i < n; ++i) {
    double mn = val[i] * R;
    double mx = val[i] * (L / 2.);
    int cnt = 0;
    for (int i = 0; i < pre.tot; ++i) {
      double newl = pre.seg[i].l - mx;
      double newr = pre.seg[i].r - mn;
      tmp[cnt++] = Seg(newl, newr);
      newl = pre.seg[i].l + mn;
      newr = pre.seg[i].r + mx;
      tmp[cnt++] = Seg(newl, newr);
    }
    sort(tmp, tmp + cnt);
    cur.ini();
    for (int i = 0; i < cnt; ++i) {
      cur.ins(tmp[i]);
    }
    if (cur.tot == 0) {
      cout << "No" << endl;
      return 0;
    }
    pre = cur;
  }
  cout << "Yes" << endl;
  return 0;
}
