#include<bits/stdc++.h>usingnamespace std;typedeflonglong ll;constint N =100100;
__int64 t[N], l[N], w[N];
__int64 n, k;
__int64 check(__int64 x){
__int64 sum =0;for(int i =1; i <= n; i ++){
__int64 s = t[i]* l[i]+ w[i];
__int64 ans =(x / s)* l[i];if(x % s >= l[i]* t[i]) sum += l[i];else sum +=(x % s)/ t[i];
sum += ans;}return sum;}intmain(){int T;
cin >> T;while(T --){
cin >> n >> k;for(int i =1; i <= n; i ++){
cin >> t[i]>> l[i]>> w[i];}
__int64 l =0, r =2e19;while(l +1< r){
__int64 mid =(l + r)/2;if(check(mid)< k) l = mid;else r = mid;}
cout << r << endl;}return0;}
#include<bits/stdc++.h>usingnamespace std;constint N =5e5+5;constint M =1e9+7;typedeflonglong ll;typedef pair<ll,ll>PII;constint MOD =998244353;
PII p[N];intmain(){int t;
cin >> t;while(t --){int n, k;
cin >> n >> k;for(int i =1; i <= n; i ++){
cin >> p[i].first >> p[i].second;}sort(p +1, p +1+ n);
priority_queue<int, vector<int>, greater<int>>q;
ll res =1;for(int i =1; i <= n; i ++){if(i ==1){
res = res * k % MOD;
k --;//重复就要少一种方案
q.push(p[i].second);}else{while(!q.empty()&& q.top()< p[i].first){
k ++;
q.pop();}//不重复就要增加一种方案的
res = res * k % MOD;
k --;if(k <0) k =0;
q.push(p[i].second);}}
cout << res << endl;}return0;}//好累啊没有状态