import java.lang.reflect.Array; import java.util.*; public class Solution { static class Point { public Point(long x, long y, long h, long p) { this.x = x; this.y = y; this.h = h; this.p = p; } long x; long y; long h; long p; int num; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); long x = scanner.nextInt(); long y = scanner.nextInt(); long[] w = new long[n]; Point[] p = new Point[n]; Point[] len = new Point[n]; List> sos = new ArrayList<>(); for (int i = 0; i < n; i++) { p[i] = new Point(scanner.nextInt(), scanner.nextInt(), scanner.nextInt(), scanner.nextInt()); sos.add(new ArrayList<>()); } Arrays.sort(p, Comparator.comparingLong(o -> o.h)); for (int i = 0; i < n; i++) { p[i].num = i; len[i] = p[i]; } Arrays.sort(len, new Comparator() { @Override public int compare(Point o1, Point o2) { if(o1.x == o2.x) { return Long.compare(o1.y, o2.y); } else { return Long.compare(o1.x, o2.x); } } }); for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if(Math.abs(len[i].x - len[j].x) <= x && Math.abs(len[i].y - len[j].y) <= y) { if(len[i].num < len[j].num) { sos.get(i).add(j); } else { sos.get(j).add(i); } } } } for (int i = 0; i < n; i++) { w[i] = p[i].p; } for (int i = 0; i < n; i++) { for (Integer next : sos.get(i)) { w[next] = Math.max(w[next], p[next].p + w[i]); } } long ans = Long.MIN_VALUE; for (int i = 0; i < n; i++) { ans = Math.max(ans, w[i]); } System.out.println(ans); } }