#include <stdio.h>
//#include <bits/stdc++.h>

#include <cmath>
#include <cstring>
#include <iostream>

using namespace std;
#define REP(i, a, b) for (int i = (a), _end_ = (b); i < _end_; ++i)
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define mp make_pair
//#define x first
//#define y second
#define pb push_back
#define eb emplace_back
#define SZ(x) (int((x).size()))
#define ALL(x) (x).begin(), (x).end()

template<typename T> inline bool chkmin(T &a, const T &b) { return a > b ? a = b, 1 : 0; }
template<typename T> inline bool chkmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }

typedef long long LL;

const double eps = 1e-10;
double add(double a, double b)
{
    if(fabs(a+b) < eps*(fabs(a) + fabs(b))) return 0;
    return a+b;
}

struct P{
    double x, y;
    P() {}
    P(double x, double y) : x(x), y(y) {}
    P operator + (P p) { return P(add(x, p.x), add(y, p.y)); }
    P operator - (P p) { return P(add(x, -p.x), add(y, -p.y)); }
    P operator * (double d) { return P(x*d, y*d); }
    double dot(P p) { return  add(x*p.x, y*p.y); }
    double det(P p) { return  add(x*p.y, -y*p.x); }
};

//determine whether q on Seg_p1p2
bool on_seg(P p1, P p2, P q)
{
    return (p1-q).det(p2-q) == 0 && (p1-q).dot(p2-q) <= 0;
}

P intersection(P p1, P p2, P q1, P q2)
{
    return p1+(p2-p1)*((q2-q1).det(q1-p1) / (q2-q1).det(p2-p1));
}

int n, v, x, y;
const int MAX_N = 55;
const double g = 9.8;
int l[MAX_N], bo[MAX_N], r[MAX_N], to[MAX_N];

double calc(double vy, double t)
{
    return vy*t - g*t*t/2.0;
}

int cmp(double lb, double ub, double a)
{
    return a<lb+eps ? -1 : (a>ub-eps ? 1 : 0);
}

bool check(double qx, double qy)
{
    double a = g*g/4.0, b = g*qy - v*v, c = qx*qx + qy*qy;
    double D = b*b - 4.0*a*c;
    if(D<0 && D>-eps) D = 0;
    if(D < 0 ) return false;
    for(int d=-1; d<=1; d+=2) {
        double t2 = (-b+d*sqrt(D)) / (2.0*a);
        if(t2 <= 0) continue;
        double t = sqrt(t2);
        double vx = qx / t, vy = (qy + g*t*t/2.0) /  t;

        double yt = calc(vy, x / vx);
        if(yt < y-eps) continue;

        bool ok = true;
        REP(i, 0, n) {
            if(l[i] >= x) continue;
            if(r[i]==x && y<=to[i] && bo[i]<=yt) ok = false;

            int yl = cmp(bo[i], to[i], calc(vy, l[i]/vx));
            int yr = cmp(bo[i], to[i], calc(vy, r[i]/vx));
            int xh = cmp(l[i], r[i], vx*(vy/g));
            int yh = cmp(bo[i], to[i], calc(vy, vy/g));
            if(xh==0 && yh>=0 && yl<0) ok = false;
            if(yl*yr <= 0) ok = false;
        }
        if(ok) return true;
    }
    return false;
}

int main()
{
#ifdef ANONYM
    freopen("input", "r", stdin);
    freopen("output", "w", stdout);
#endif

    scanf("%d%d%d%d", &n, &v, &x, &y);
    REP(i, 0, n) {
        scanf("%d%d%d%d", &l[i], &bo[i], &r[i], &to[i]);
        r[i] = min(r[i], x);
    }
    bool ok = check(x, y);
    REP(i, 0, n) {
        ok |= check(l[i], to[i]);
        ok |= check(r[i], to[i]);
    }
    puts(ok ? "Yes" : "No");
    return 0;
}