#include <bits/stdc++.h>
using namespace std;
long long n, l, r, m;
struct ANS {
  long long l, r;
} que[2][1000100];
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;
  long long tem;
  long long temmax, temmin, ttl, ttr;
  while (scanf("%lld%lld%lld%lld", &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("%lld", &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 {
          if (que[typ][c[typ]].l < 0) {
            ttl = que[typ][c[typ]].l;
            ttr = que[typ][c[typ]].r;
            que[typ][c[typ]].l = -ttr;
            que[typ][c[typ]].r = -ttl;
          }
        }
        while (que[typ][c[typ]].r < que[typ][c[typ]].l) t = t;
        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;
}
