import std.algorithm; import std.array; import std.ascii; import std.container; import std.conv; import std.math; import std.numeric; import std.range; import std.stdio; import std.string; import std.typecons; void log(A...)(A arg) { stderr.writeln(arg); } int size(T)(in T s) { return cast(int)s.length; } void main() { int N, B; readf("%d %d\n", &N, &B); auto X = new int[N]; auto Y = new int[N]; auto P = new int[N]; foreach (i; 0 .. N) { readf("%d %d %d\n", &X[i], &Y[i], &P[i]); } int ans = 0; for (int i = 0; i < N; i++) { for (int j = i; j < N; j++) { int sy = min(Y[i], Y[j]); int ty = max(Y[i], Y[j]); auto r = iota(0, N, 1).filter!(k => sy <= Y[k] && Y[k] <= ty); auto sa = sort!((a, b) => (X[a] < X[b]))(r.array).array; int n = sa.size; int sk = 0, tk = 0; int sum = 0; //log("i, j: ", [i, j]); while (sk < n || tk < n) { //log("sk, tk: ", [sk, tk]); ans = max(ans, tk - sk); int nsum = sum; int nk = tk; while (nk < n && X[sa[nk]] == X[sa[tk]]) { nsum += P[sa[nk++]]; } if (tk == n || nsum > B) { int sx = X[sa[sk]]; while (sk < n && X[sa[sk]] == sx) { sum -= P[sa[sk++]]; } } else { tk = nk; sum = nsum; } } } } writeln(ans); }