#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef pair pii; typedef long long ll; #define mp make_pair #define fi first #define se second #define pb push_back #define endl '\n' #define eps 1e-8 #define io ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0); #define file freopen ("in.txt", "r", stdin),freopen ("out.txt", "w", stdout); #define filein freopen ("in.txt", "r", stdin); #define all(v) ((v).begin()), ((v).end()) #define mid ((st + en) >> 1) const int N = 2e5 + 5; ll dp[N]; int n, x, y; struct node{ int x, y, h, c; bool operator <(const node &that) const{ return h < that.h; } } a[N]; ll f(int idx){ ll &ret = dp[idx]; if(ret != -1) return ret; ret = a[idx].c; for(int i = idx + 1; i < n; i++) if(a[i].h > a[idx].h && abs(a[i].x - a[idx].x) <= x && abs(a[i].y - a[idx].y) <= y ) ret = max(ret, f(i) + a[idx].c); return ret; } int main(){ //filein; cin >> n >> x >> y; for(int i = 0; i < n; i++) cin >> a[i].x >> a[i].y >> a[i].h >> a[i].c; sort(a, a + n); memset(dp, -1, sizeof dp); long long ret = -(1LL << 60); for(int i = 0; i < n; i++) ret = max(ret, f(i)); cout << ret << endl; return 0; }