#include using namespace std; int n; int dx; int dy; struct City { int H, Lat, Long, Points; }; vector v, tmp; vector x; long long MaxPoints() { long long best, points; best = -999999999; do { points = tmp[x[0]].Points; bool ok = true; for (int i = 1; i < tmp.size() && ok; i++) { if (tmp[x[i]].H > tmp[x[i-1]].H && abs(tmp[x[i]].Lat - tmp[x[i-1]].Lat) <= dx && abs(tmp[x[i]].Long - tmp[x[i-1]].Long) <= dy) { points += tmp[x[i]].Points; } else { ok = false; } } if (ok) best = max(best, points); } while (next_permutation(x.begin(), x.end())); /* for (auto c : tmp) { cerr << c.H << " " << c.Lat << " " << c.Long << " " << c.Points << endl; } cerr << best << endl; cerr << "---------------------------------------------" << endl;*/ return best; } void Solve() { long long best = -999999999; for (int i = 1; i < (1 << v.size()); i++) { tmp.clear(); x.clear(); int k = 0; for (int j = 0; j < v.size(); j++) { if (i & (1 << j)) { tmp.push_back(v[j]); x.push_back(k++); } //cerr << "j: " << j << " " << tmp.size() << endl; } if (x.size() > 0) best = max(best, MaxPoints()); } cout << best << endl; } int main(){ cin >> n >> dx >> dy; for(int a0 = 0; a0 < n; a0++){ int latitude; int longitude; int height; int points; cin >> latitude >> longitude >> height >> points; City c({height, latitude, longitude, points}); v.push_back(c); } Solve(); return 0; }