#include <bits/stdc++.h>
using namespace std;
int n, l, r, m;
int sum;
struct ANS {
  int l, r;
} que[2][100100];
int c[2];
bool cmp(const ANS &a, const ANS &b) { return a.l < b.l; }
int main() {
  int i, j, k, ans, t, typ;
  int tem;
  int temmax, temmin;
  while (scanf("%d%d%d%d", &n, &l, &m, &r) != EOF) {
    r = r * 2;
    m = m * 2;
    que[0][0].l = 0;
    que[0][0].r = 0;
    c[0] = 1;
    for (t = 1; t <= n; t++) {
      scanf("%d", &tem);
      typ = (t & 1);
      c[typ] = 0;
      temmax = tem * l;
      temmin = tem * r;
      for (i = 0; i < c[typ ^ 1]; i++) {
        que[typ][c[typ]].l = temmin + que[typ ^ 1][i].l;
        que[typ][c[typ]].r = temmax + que[typ ^ 1][i].r;
        if (que[typ][c[typ]].r > m) que[typ][c[typ]].r = m;
        if (que[typ][c[typ]].l <= m) c[typ]++;
        que[typ][c[typ]].l = temmin - que[typ ^ 1][i].r;
        que[typ][c[typ]].r = temmax - que[typ ^ 1][i].l;
        if (que[typ][c[typ]].l * que[typ][c[typ]].r < 0) {
          que[typ][c[typ]].r =
              max(abs(que[typ][c[typ]].r), abs(que[typ][c[typ]].l));
          que[typ][c[typ]].l = 0;
        } else {
          que[typ][c[typ]].l = abs(que[typ][c[typ]].l);
          que[typ][c[typ]].r = abs(que[typ][c[typ]].r);
        }
        if (que[typ][c[typ]].r > m) que[typ][c[typ]].r = m;
        if (que[typ][c[typ]].l <= m) c[typ]++;
      }
      sort(que[typ], que[typ] + c[typ], cmp);
      for (i = 1, j = 0; i < c[typ]; i++) {
        if (que[typ][i].l <= que[typ][j].r)
          que[typ][j].r = max(que[typ][i].r, que[typ][j].r);
        else
          que[typ][++j] = que[typ][i];
      }
      if (c[typ] > 0) c[typ] = j + 1;
    }
    if (c[typ] > 0)
      printf("Yes\n");
    else
      printf("No\n");
  }
  return 0;
}
