#include #include #include using namespace std; struct City{ int latitude; int longitude; int height; int points; City(int a, int b, int c, int d){ latitude = a; longitude = b; height = c; points = d; } friend bool operator<(const City &c1, const City &c2){ if(c1.height == c2.height){ if(c1.latitude == c2.latitude){ if(c1.longitude == c2.longitude){ return c1.points < c2.points; } else return c1.longitude < c2.longitude; } else return c1.latitude < c2.latitude; } else return c1.height < c2.height; } }; int get_max(const vector &cities, int x, int y){ vector max_points(cities.size(), 0); max_points[0] = cities[0].points; for(int i = 1; i < cities.size(); i++){ for(int j = 0; j < i; j++){ //Can jth city even reach ith city if(abs(cities[j].latitude - cities[i].latitude) <= x && abs(cities[j].longitude - cities[i].longitude) <= y){ if(max_points[j] + cities[i].points > cities[i].points) max_points[i] = max_points[j] + cities[i].points; else max_points[i] = cities[i].points; } else max_points[i] = cities[i].points; } } return *max_element(max_points.begin(), max_points.end()); } int main(){ int n; int x; int y; cin >> n >> x >> y; vector cities; for(int a0 = 0; a0 < n; a0++){ int latitude; int longitude; int height; int points; cin >> latitude >> longitude >> height >> points; City c(latitude, longitude, height, points); cities.push_back(c); } sort(cities.begin(), cities.end()); cout << get_max(cities, x, y) << endl; return 0; }