for (int i = 1; i <= n; i++)
{
if (cow[i].v == 1)
{
if (L - cow[i].pos <= x)r++;
}
else
{
if (cow[i].pos <= x)l++;
}
}
int nw = 0;
for (int i = 1; i <= l; i++)
{
nw += cow[i].w;
}
for (int i = n - r + 1; i <= n; i++)
{
nw += cow[i].w;
}
if (nw >= (totw + 1) / 2)return 1;
else return 0;
}
void work()
{
scanf("%d%d", &n, &L); int c1 = 0, c2 = 0;
for (int i = 1; i <= n; i++)
{
int w, x, v;
scanf("%d%d%d", &w, &x, &v);
cow[i] = { x,w,v,i }; totw += w;
if (v == 1)cow1[++c1] = cow[i];
else cow2[++c2] = cow[i];
}
sort(cow + 1, cow + 1 + n);
sort(cow1 + 1, cow1 + 1 + c1);
sort(cow2 + 1, cow2 + 1 + c2);
ll l = 1, r = L;
while (l < r){
ll mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
ll ans = 0;
for (int i = 1; i <= c1; i++)
{
COW tmp1 = { cow1[i].pos,0,0,0 };
COW tmp2 = { cow1[i].pos + 2ll * l,0,0,0 };
int pos1 = upper_bound(cow2 + 1, cow2 + 1 + c2, tmp1) - cow2;
int pos2 = upper_bound(cow2 + 1, cow2 + 1 + c2, tmp2) - cow2;
ans += pos2 - pos1;
}
printf("%lld\n", ans);
}
int main(){
work();
}