import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int x = in.nextInt(); int y = in.nextInt(); TreeMap> ht = new TreeMap>(); int[] lats = new int[n]; int[] lons = new int[n]; int[] pts = new int[n]; TreeMap> ptm = new TreeMap>(); for (int i = 0; i < n; i++){ lats[i] = in.nextInt(); lons[i] = in.nextInt(); int height = in.nextInt(); pts[i] = in.nextInt(); if (!ht.containsKey(height)) ht.put(height, new ArrayList()); ht.get(height).add(i); } for (int h : ht.descendingKeySet()) { HashMap> toAdd = new HashMap>(); for (int city : ht.get(h)) { long score = pts[city]; boolean found = false; for (long ct : ptm.descendingKeySet()) { for (int city2 : ptm.get(ct)) { if (Math.abs(lons[city2]-lons[city])<=y&&Math.abs(lats[city2]-lats[city])<=x) { score += ct; found = true; break; } } if (found) break; } if (score > 0) { if (!toAdd.containsKey(score)) { toAdd.put(score, new ArrayList()); } toAdd.get(score).add(city); } } for (long key : toAdd.keySet()) { if (!ptm.containsKey(key)) ptm.put(key, new ArrayList()); ptm.get(key).addAll(toAdd.get(key)); } } if (ptm.isEmpty()) { System.out.println(0); } else { System.out.println(ptm.lastKey()); } } }