#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
struct TnT {
  long long s, a, b;
} T[maxn];
long long TT[maxn];
bool cmp1(TnT x, TnT y) { return (x.a - x.b) < (y.a - y.b); }
bool cmp2(TnT x, TnT y) { return (x.b - x.a) < (y.b - y.a); }
int main() {
  long long N, S, pos, cnt, t1 = 0, t2 = 0;
  long long tmp, sum = 0, ans = 0;
  scanf("%lld %lld", &N, &S);
  for (long long i = 0; i < N; i++) {
    scanf("%lld %lld %lld", &T[i].s, &T[i].a, &T[i].b);
    if (T[i].a > T[i].b)
      t1 += T[i].s, sum += T[i].s * T[i].a;
    else
      t2 += T[i].s, sum += T[i].s * T[i].b;
  }
  t1 = t1 % S;
  t2 = t2 % S;
  if (t1 + t2 > S) {
    cout << sum << endl;
    return 0;
  }
  sort(T, T + N, cmp1);
  for (long long i = 0; i < N; i++) TT[i] = T[i].a - T[i].b;
  pos = upper_bound(TT, TT + N, 0) - TT;
  cnt = t1;
  tmp = sum;
  for (long long i = pos; i < N; i++) {
    if (cnt - T[i].s <= 0) {
      tmp -= cnt * TT[i];
      break;
    } else {
      tmp -= T[i].s * TT[i];
      cnt -= T[i].s;
    }
  }
  ans = max(ans, tmp);
  sort(T, T + N, cmp2);
  for (long long i = 0; i < N; i++) TT[i] = T[i].b - T[i].a;
  pos = lower_bound(TT, TT + N, 0) - TT;
  cnt = t2;
  tmp = sum;
  for (long long i = pos; i < N; i++) {
    if (cnt - T[i].s <= 0) {
      tmp -= cnt * TT[i];
      break;
    } else {
      tmp -= T[i].s * TT[i];
      cnt -= T[i].s;
    }
  }
  ans = max(ans, tmp);
  printf("%lld\n", ans);
  return 0;
}
