#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 55;
const double g = 9.8;   //重力加速度
const double EPS = 1e-10;
int N;
double V, X, Y;
double L[maxn], B[maxn], R[maxn], T[maxn];

//&#35745;算以vy的速度&#31446;直向上射出t秒后的位置
double calc(double vy, double t)
{
    return vy * t - g * t * t / 2;
}

//a相&#23545;lb和ub的位置
int cmp(double lb, double ub, double a)
{
    return a < lb + EPS ? -1 : a > ub - EPS ? 1 : 0;
}

//判断当射出路径&#32463;&#36807;点(qx, qy)&#26102;，卵是否能&#20987;中猪
bool check(double qx, double qy)
{
    //&#35774;初速度在x方向和y方向的分量分&#21035;&#20026;vx和vy，&#35774;通&#36807;(qx, qy)的&#26102;&#38388;&#20026;t
    //&#35774;解&#32852;立方程式vx^2 + vy ^2 = V^2, vx * t = 1x, vy * t - 1/2 g t^2 = qy
    double a = g * g / 4, b = g * qy - V * V, c = qx * qx + qy * qy;
    double D = b * b - 4 * a * c;
    if (D < 0 && D > -EPS)
        D = 0;
    if (D < 0)
        return false;
    for (int d = -1; d <= 1; d += 2){       //&#39564;&#35777;&#32852;立方程式上的&#20004;个解的循&#29615;
        double t2 = (-b + d * sqrt(D)) / (2 * a);
        if (t2 <= 0)
            continue;
        double t = sqrt(t2);
        double vx = qx / t, vy = (qy + g * t * t / 2) / t;

        //判断是否通&#36807;猪的正上方
        double yt = calc(vy, X / vx);
        if (yt < Y - EPS)
            continue;

        bool ok = true;
        for (int i = 0; i < N; i++){
            if (L[i] >= X)
                continue;
            //判断在猪正上方的&#40479;和猪之&#38388;是否有障碍物
            if (R[i] == X && Y <= T[i] && B[i] <= yt)
                ok = false;
            //判断在&#39134;到猪的正上方之前是否会撞到障碍物
            int yL = cmp(B[i], T[i], calc(vy, L[i] / vx));   //左&#20391;的相&#23545;位置
            int yR = cmp(B[i], T[i], calc(vy, R[i] / vx));   //右&#20391;的相&#23545;位置
            int xH = cmp(L[i], R[i], vx * (vy / g));      //最高点的相&#23545;位置
            int yH = cmp(B[i], T[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;
}

void solve()
{
    //截掉猪以右的障碍物
    for (int i = 0; i < N; i++){
        R[i] = min(R[i], X);
    }
    bool ok = check(X, Y);      //直接撞上猪的情况
    for (int i = 0; i < N; i++){
        ok |= check(L[i], T[i]);     //&#32463;&#36807;左上角的情况
        ok |= check(R[i], T[i]);     //&#32463;&#36807;右上角的情况
    }
    puts(ok ? "Yes" : "No");
}

int main()
{
    while (scanf("%d%lf%lf%lf", &N, &V, &X, &Y) != EOF){
        for (int i = 0; i < N; i++){
            scanf("%lf%lf%lf%lf", &L[i], &B[i], &R[i], &T[i]);
        }
        solve();
    }
    return 0;
}