#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

#define MP make_pair
#define PB push_back

typedef double DB;
typedef long long LL;

const DB eps = 1e-8;
const int N = 150007;
const int MOD = 1e9 + 7;
const int INF = 1e9 + 7;

const double PI = acos(-1);
const double gg = 9.8;

//double CalcMaxCeta(double X) {
//    double l = 0.0, r = PI / 2;
//    for (int i = 1; i <= 40; i ++) {
//        double mid1 = l + (r - l) / 3.0;
//        double mid2 = r - (r - l) / 3.0;
//        if (CalcHeight(mid1, X) > CalcHeight(mid2, X)) {
//            l = mid2;
//        } else {
//            r = mid1;
//        }
//    }
//    return l;
//}
//
//double BinarySearch(bool op, double l, double r, double X, double Y) {
//    for (int i = 1; i <= 40; i ++) {
//        double mid = (l + r) / 2.0;
//        double height = CalcHeight(mid, X);
//        if (op == 0) { // ascending
//            if (height > Y) r = mid; else l = mid;
//        } else { // descending
//            if (height > Y) l = mid; else r = mid;
//        }
//    }
//}


double V;
int low;

int sgn(double x){
    return x < -eps ? -1 : x > eps;
}


inline double CalcHeight(double ceta, double X) {
    double t = X / (V * cos(ceta));
    double y = (V * sin(ceta)) * t - 0.5 * gg * t * t;
    return y;
}

inline double GetM(double ceta) {
    double t = V * sin(ceta) / gg;
    return V * cos(ceta) * t;
}


int n, X, Y, l[N], b[N], r[N], t[N];

bool Gao(double ceta) {
    double hh = CalcHeight(ceta, X);
//    cout << ceta << ' ' << X << ' ' << hh << ' ' << Y << ' ' << low << endl;
    if (sgn(hh - Y ) < 0  || sgn(hh-low) > 0 )  {
        return false;
    }
//    cout << "~";

    double mx = GetM(ceta);
    double my = CalcHeight(ceta, mx);


    for (int i = 1; i <= n; i ++) {
        if (l[i] > X) continue;

        DB h1 = CalcHeight(ceta, l[i]);
        DB h2 = CalcHeight(ceta, r[i]);


        //cout << h1 << " " << h2 <<" " << mx << " "<< my << endl;


        if (l[i] <= mx && mx <= r[i]){
            if (! (h1 <= b[i] && h2 <= b[i] && my <= b[i] || h1 >= t[i] && h2 >= t[i] && my >= t[i])) return false;
        }
        else{
            if (! (h1 <= b[i] && h2 <= b[i] || h1 >= t[i] && h2 >= t[i])) return false;
        }



        /*double delta = (r[i] - l[i]) / 100.0;
        int sum1 = 0, sum2 = 0;
        for (int j = 0; j < 100; j ++) {
            double ss = delta * j + l[i];
            double h3 = CalcHeight(ceta, ss);
            sum1 += sgn(h3 - b[i]);
            sum2 += sgn(h3 - t[i]);
        }
        if (sum1 == -100 || sum2 == 100) {
        } else {
            return false;
        }*/
    }
    return true;
}

bool Check() {
//    double maxCeta = CalcMaxCeta(X);
//    double maxHeight = CalcHeight(maxCeta, X);
//    if (maxHeight < Y) {
//        return false;
//    }
//    if (Gao(PI / 4.0)) return true;
    if (X == 0 && Y == 0) {
        return true;
    }
    else if (X == 0){
        double hhh = CalcHeight(PI / 2, 0);
        if (sgn(hhh - Y) < 0) return false;
        for (int i = 1; i <= n; i ++) {
            if (l[i] == 0 && b[i] <= Y)
                return false;
        }
        return true;
    }
    for (int i = 1; i <= n; i ++){
        if (l[i] == 0 && b[i] == 0) {
            return false;
        }

        if (l[i] <= X && X <= r[i]  && b[i] <= Y && Y <= t[i]) return false;

    }
    for (double i = 0, delta = PI / 2 / 15000.0; i <= PI / 2; i += delta) {
        if (Gao(i)) return true;
    }
    return false;
}

int main() {
    //freopen("in.txt", "r", stdin);
    while (scanf("%d%lf%d%d", &n, &V, &X, &Y) == 4) {
        low = INF;
        //n = 0;
        for (int i = 1; i <= n; i ++) {
            scanf("%d%d%d%d", &l[i], &b[i], &r[i], &t[i]);
            if (r[i] >= X) r[i] = X;
            if (l[i] <= X && X <= r[i]) {
                if (Y >= t[i])continue;
                low = min(low, (int)b[i]);
            }
        }
//        cout << low << endl;
        if (Check()) puts("Yes");
        else puts("No");
//        break;
    }
}