#include <bits/stdc++.h>
using namespace std;

const int MAXN = 100005;

int n, x;
struct test{
	long long b, l, u;
	test(){}
	
	bool operator <(const test& y) const{
		return u * x - u * b + l * b > y.u * x - y.u * y.b + y.l * y.b;
	}
} t[MAXN];

long long calc(test& z, int r){
	if(r <= z.b){
		return (z.l * (r - z.b));
	}else{
		return (z.u * (r - z.b));
	}
}

bool check(long long h){
	if(h % x == 0){
		long long s = 0;
		
		for(int i = 0; i < h / x; i++)
			s += calc(t[i], x);
		for(int i = h / x; i < n; i++)
			s += calc(t[i], 0);
		
		return (s >= 0);
	}
	
	int rem = h % x;
	
	long long s = 0;
	for(int i = 0; i < h / x + 1; i++)
		s += calc(t[i], x);
	for(int i = h / x + 1; i < n; i++)
		s += calc(t[i], 0);
	
	long long r = -1;
	for(int i = 0; i < h / x; i++)
		r = max(r, s - calc(t[i], x) + calc(t[i], rem));
		
	s += calc(t[h / x], 0) - calc(t[h / x], x);
	
	for(int i = h / x; i < n; i++)
		r = max(r, s - calc(t[i], 0) + calc(t[i], rem));
		
	return (r >= 0);
}

int main(){
	scanf("%d %d", &n, &x);
	for(int i = 0; i < n; i++)
		scanf("%lld %lld %lld", &t[i].b, &t[i].l, &t[i].u);
	sort(t, t + n);
	
	long long L = 0, R = 1LL * x * n;
	while(L < R){
		long long mid = (L + R) / 2;
		
		if(check(mid))R = mid;
		else L = mid + 1;
	}
	printf("%lld\n", L);
	
	return 0;
}
