#include <bits/stdc++.h>
using namespace std;
const int MM = 1005;
long long MASK;
int NN, mm[MM], L, R, ans, M;
const double eps = 1e-10;
const int MAXSIZE = 2000;
const int oo = 19890709;
double A[MAXSIZE + 1][MAXSIZE + 1], tA[MAXSIZE + 1][MAXSIZE + 1];
double b[MAXSIZE + 1], tb[MAXSIZE + 1], c[MAXSIZE + 1], tc[MAXSIZE + 1];
int N[MAXSIZE + 2], B[MAXSIZE + 2];
int n, m;
double v;
class LinearProgramming {
  void read() {
    n = NN, m = 4 * NN;
    for (int i = 1; i <= n; ++i) c[i] = 1;
    for (int i = 1; i <= n; ++i) {
      for (int j = 1; j <= n; ++j) {
        A[n + i][j] = 0;
        if (j == i) {
          if (((MASK >> (i - 1)) & 1))
            A[n + i][j] = 1;
          else
            A[n + i][j] = -1;
        }
      }
      b[n + i] = (double)L * 0.5 + eps;
    }
    for (int i = n + 1; i <= 2 * n; ++i) {
      for (int j = 1; j <= n; ++j) {
        A[n + i][j] = 0;
        if (j == i - n) {
          if (((MASK >> ((i - n) - 1)) & 1))
            A[n + i][j] = -1;
          else
            A[n + i][j] = 1;
        }
      }
      b[n + i] = -R + eps;
    }
    for (int i = 2 * n + 1; i <= 3 * n; ++i) {
      for (int j = 1; j <= i - 2 * n; ++j) A[n + i][j] = mm[j];
      for (int j = i - 2 * n + 1; j <= n; ++j) A[n + i][j] = 0;
      b[n + i] = M + eps;
    }
    for (int i = 3 * n + 1; i <= 4 * n; ++i) {
      for (int j = 1; j <= i - 3 * n; ++j) A[n + i][j] = -mm[j];
      for (int j = i - 3 * n + 1; j <= n; ++j) A[n + i][j] = 0;
      b[n + i] = M + eps;
    }
    for (int i = 1; i <= m; ++i) {
    }
  }
  void pivot(int l, int e) {
    tb[e] = b[l] / A[l][e];
    tA[e][l] = 1 / A[l][e];
    for (int i = 1; i <= N[0]; i++)
      if (N[i] != e) tA[e][N[i]] = A[l][N[i]] / A[l][e];
    for (int i = 1; i <= B[0]; i++) {
      tb[B[i]] = b[B[i]] - A[B[i]][e] * tb[e];
      tA[B[i]][l] = -A[B[i]][e] * tA[e][l];
      for (int j = 1; j <= N[0]; j++)
        if (N[j] != e)
          tA[B[i]][N[j]] = A[B[i]][N[j]] - tA[e][N[j]] * A[B[i]][e];
    }
    v += tb[e] * c[e];
    tc[l] = -tA[e][l] * c[e];
    for (int i = 1; i <= N[0]; i++)
      if (N[i] != e) tc[N[i]] = c[N[i]] - tA[e][N[i]] * c[e];
    for (int i = 1; i <= N[0]; i++)
      if (N[i] == e) N[i] = l;
    for (int i = 1; i <= B[0]; i++)
      if (B[i] == l) B[i] = e;
    for (int i = 1; i <= B[0]; i++) {
      for (int j = 1; j <= N[0]; j++) A[B[i]][N[j]] = tA[B[i]][N[j]];
      b[B[i]] = tb[B[i]];
    }
    for (int i = 1; i <= N[0]; i++) c[N[i]] = tc[N[i]];
  }
  bool opt() {
    while (1) {
      int l, e;
      double maxUp = -1;
      for (int ie = 1; ie <= N[0]; ie++) {
        int te = N[ie];
        if (c[te] <= 0) continue;
        double delta = oo;
        int tl = MAXSIZE + 1;
        for (int i = 1; i <= B[0]; i++)
          if (A[B[i]][te] > eps) {
            double temp = b[B[i]] / A[B[i]][te];
            if (fabs(delta - oo) < eps || temp < delta + eps ||
                fabs(temp - delta) < eps && B[i] < tl + eps) {
              delta = temp;
              tl = B[i];
            }
          }
        if (tl == MAXSIZE + 1) return 0;
        if (delta * c[te] > maxUp) {
          maxUp = delta * c[te];
          l = tl;
          e = te;
        }
      }
      if (maxUp == -1) break;
      pivot(l, e);
    }
    return 1;
  }
  void delete0() {
    int p;
    for (p = 1; p <= B[0]; p++)
      if (B[p] == 0) break;
    if (p <= B[0]) pivot(0, N[1]);
    for (p = 1; p <= N[0]; p++)
      if (N[p] == 0) break;
    for (int i = p; i < N[0]; i++) N[i] = N[i + 1];
    N[0]--;
  }
  bool initialize() {
    N[0] = B[0] = 0;
    for (int i = 1; i <= n; ++i) N[++N[0]] = i;
    for (int i = 1; i <= m; i++) B[++B[0]] = n + i;
    v = 0;
    int l = B[1];
    for (int i = 2; i <= B[0]; i++)
      if (b[B[i]] < b[l]) l = B[i];
    if (b[l] >= 0) return 1;
    double origC[MAXSIZE + 1];
    memcpy(origC, c, sizeof(double) * (n + m + 1));
    N[++N[0]] = 0;
    for (int i = 1; i <= B[0]; i++) A[B[i]][0] = -1;
    memset(c, 0, sizeof(double) * (n + m + 1));
    c[0] = -1;
    pivot(l, 0);
    opt();
    if (v < -eps) return 0;
    delete0();
    memcpy(c, origC, sizeof(double) * (n + m + 1));
    bool inB[MAXSIZE + 1];
    memset(inB, 0, sizeof(bool) * (n + m + 1));
    for (int i = 1; i <= B[0]; i++) inB[B[i]] = 1;
    for (int i = 1; i <= n + m; i++)
      if (inB[i] && c[i] != 0) {
        v += c[i] * b[i];
        for (int j = 1; j <= N[0]; j++) c[N[j]] -= A[i][N[j]] * c[i];
        c[i] = 0;
      }
    return 1;
  }

 public:
  void simplex() {
    read();
    if (initialize()) {
      ans = 1;
      return;
    }
  }
};
int main() {
  scanf("%d%d%d%d", &NN, &L, &M, &R);
  ans = 0;
  for (int i = 1; i <= NN; ++i) scanf("%d", &mm[i]);
  for (MASK = 0; MASK < (1ll << NN) - 1; ++MASK) {
    LinearProgramming test;
    test.simplex();
    if (ans) break;
  }
  if (ans)
    printf("Yes\n");
  else
    printf("No\n");
  return 0;
}
