#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define f first #define s second #define ll long long #define ull unsigned long long #define mp make_pair #define pb push_back #define vi vector #define ld long double #define pii pair #define y1 sda using namespace std; const int N = int(3e5), mod = int(1e9) + 7; int n, x,y; int a[N], b[N], h[N], p[N], q[N]; ll d[N]; bool cmp(int i,int j){ return h[i] < h[j]; } int main () { scanf("%d%d%d",&n,&x,&y); ll ans = 0,sum = 0; for(int i = 1; i <= n; i++){ scanf("%d%d%d%d",&a[i],&b[i],&h[i],&p[i]); q[i] = i; sum += p[i]; } sort(q + 1, q + n + 1, cmp); if(n <= 5000){ for(int k = 1; k <= n; k++){ int i = q[k]; d[i] = p[i]; for(int t = 1; t < k; t++){ int j = q[t]; if(h[i] > h[j] && abs(a[i] - a[j]) <= x && abs(b[i] - b[j]) <= y) d[i] = max(d[i], d[j] + p[i]); } ans = max(ans, d[i]); } } else{ for(int k = 1; k <= n; k++){ int i = q[k]; d[i] = p[i]; for(int t = 1; t < min(k,500); t++){ int j = q[t]; if(h[i] > h[j] && abs(a[i] - a[j]) <= x && abs(b[i] - b[j]) <= y) d[i] = max(d[i], d[j] + p[i]); } for(int t = k - 1; t > max(k - 500, 0); t--){ int j = q[t]; if(h[i] > h[j] && abs(a[i] - a[j]) <= x && abs(b[i] - b[j]) <= y) d[i] = max(d[i], d[j] + p[i]); } ans = max(ans, d[i]); } } cout << max(ans, sum); return 0; }