#include<iostream>
#include<cmath>
#include<cstring>
#include<set>
#include<vector>
#include<map>
#include<algorithm>
#include<sstream>
#include<climits>
#include<utility>
#define MX 100000
#include<queue>
#define fs first
#define sec second
#define vi vector<int>
#define tc(t) int t; scanf("%d",&t); while(t--)
#define pi pair<int, int>
#define TC int T;cin>>T;while(T--)
#define loop(i,a,c) for(int i=0;i<a;i++)
#define loop1(i,a,c) for(int i=1;i<=a;i++)
#define pb(a) push_back(a)
#define all(a) (a).begin(), (a).end()
#define mp(x, y) make_pair((x), (y))
#define ll long long int
#define iter(c) typeof(c.begin())
#define foreach(it, c) for(iter(c) it = c.begin(); it != c.end(); it++)
using namespace std;
map<int,int>m;
int main()
{
//test cases
tc(t)
{
int n,d;
scanf("%d %d",&n,&d);
{
ll sum=0;
priority_queue<int>v[d];
vector<pair<int ,pair<int,int> > >p;
pair<int,int>p2;
while(n--)
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
//sum is the total number of sadness of teachers initially when nobody has taught anything
sum=sum+b*c;
p2=mp(a,b);
//vector p is used to store Si,Di,Ti
p.push_back(mp(c,p2));
//we push Si in priority queue from the day the trainer starts teaching till the last day
//we will later delete some of them so that lectures are not more than the max lectures
for(int i=a-1;i<d;i++)
{
v[i].push(c);
}
}
ll minus=0;
//some indices of the priority queue might have been empty so we fill them with zero
for(int i=0;i<d;i++)
{
v[i].push(0);
}
//sort vector ac. to Si
sort(p.rbegin(),p.rend());
//p contains every teachers Si Di Ti
for(int i=0;i<p.size();i++)
{
//count keeps track of the total lectures taken by a trainer
// we wod start deleting the element in the queue when the count of a trainers equals the max value that he can take
int count=0;
//p[i].sec.fs is the first day of teaching of ith teacher
//so p[i].sec.fs -1 is the index in priority queue corresponding to the day
//we iterate till the last day he could teach which is located at index d-1
for(int j=p[i].sec.fs-1;j<d;j++)
{
if(p[i].fs==v[j].top())
{
if(count>=p[i].sec.sec)v[j].pop();
else
{
//minus is used to track the number of days for which the
//teacher has been assigned
//if minus == d we have solved for the whole days
count++;
minus++;
//decrease the value of front of the queue which is the Si of the trainer
// from sum when the trainer has been assigned on a day
sum-=v[j].top();
//we push intmax to avoid repetition in counting
//and to know that the days problem has been solved
v[j].push(INT_MAX);
if(minus==d)break;
}
}
}
if(minus==d)break;
}
cout<<sum<<endl;
}
}
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8bWFwPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPHNzdHJlYW0+CiNpbmNsdWRlPGNsaW1pdHM+CiNpbmNsdWRlPHV0aWxpdHk+CiNkZWZpbmUgTVggMTAwMDAwCiNpbmNsdWRlPHF1ZXVlPgojZGVmaW5lIGZzIGZpcnN0CiNkZWZpbmUgc2VjIHNlY29uZAojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgdGModCkgaW50IHQ7IHNjYW5mKCIlZCIsJnQpOyB3aGlsZSh0LS0pCiNkZWZpbmUgcGkgcGFpcjxpbnQsIGludD4KI2RlZmluZSBUQyBpbnQgVDtjaW4+PlQ7d2hpbGUoVC0tKQojZGVmaW5lIGxvb3AoaSxhLGMpIGZvcihpbnQgaT0wO2k8YTtpKyspCiNkZWZpbmUgbG9vcDEoaSxhLGMpIGZvcihpbnQgaT0xO2k8PWE7aSsrKQojZGVmaW5lIHBiKGEpIHB1c2hfYmFjayhhKQojZGVmaW5lIGFsbChhKSAoYSkuYmVnaW4oKSwgKGEpLmVuZCgpCiNkZWZpbmUgbXAoeCwgeSkgbWFrZV9wYWlyKCh4KSwgKHkpKQojZGVmaW5lIGxsIGxvbmcgbG9uZyBpbnQKI2RlZmluZSBpdGVyKGMpIHR5cGVvZihjLmJlZ2luKCkpCiNkZWZpbmUgZm9yZWFjaChpdCwgYykgZm9yKGl0ZXIoYykgaXQgPSBjLmJlZ2luKCk7IGl0ICE9IGMuZW5kKCk7IGl0KyspCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cm1hcDxpbnQsaW50Pm07CmludCBtYWluKCkKewoJLy90ZXN0IGNhc2VzCgl0Yyh0KQoJewoJCWludCBuLGQ7CgkJc2NhbmYoIiVkICVkIiwmbiwmZCk7CgkJewoJCQlsbCBzdW09MDsKCQkJcHJpb3JpdHlfcXVldWU8aW50PnZbZF07CgkJCXZlY3RvcjxwYWlyPGludCAscGFpcjxpbnQsaW50PiA+ID5wOwoJCQlwYWlyPGludCxpbnQ+cDI7CgkJCXdoaWxlKG4tLSkKCQkJewoJCQkJaW50IGEsYixjOwoJCQkJCgkJCQlzY2FuZigiJWQgJWQgJWQiLCZhLCZiLCZjKTsKCQkJCS8vc3VtIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2FkbmVzcyBvZiB0ZWFjaGVycyBpbml0aWFsbHkgd2hlbiBub2JvZHkgaGFzIHRhdWdodCBhbnl0aGluZwoJCQkJc3VtPXN1bStiKmM7CgkJCQlwMj1tcChhLGIpOwoJCQkJCgkJCQkvL3ZlY3RvciBwIGlzIHVzZWQgdG8gc3RvcmUgU2ksRGksVGkKCQkJCXAucHVzaF9iYWNrKG1wKGMscDIpKTsKCQkJCQoJCQkJCgkJCQkvL3dlIHB1c2ggU2kgaW4gcHJpb3JpdHkgcXVldWUgZnJvbSB0aGUgZGF5IHRoZSB0cmFpbmVyIHN0YXJ0cyB0ZWFjaGluZyB0aWxsIHRoZSBsYXN0IGRheQoJCQkJLy93ZSB3aWxsIGxhdGVyIGRlbGV0ZSBzb21lIG9mIHRoZW0gc28gdGhhdCBsZWN0dXJlcyBhcmUgbm90IG1vcmUgdGhhbiB0aGUgbWF4IGxlY3R1cmVzCgkJCQlmb3IoaW50IGk9YS0xO2k8ZDtpKyspCgkJCQl7CgkJCQkJdltpXS5wdXNoKGMpOwoJCQkJfQoJCQl9CgkJCWxsIG1pbnVzPTA7CgkJCS8vc29tZSBpbmRpY2VzIG9mIHRoZSBwcmlvcml0eSBxdWV1ZSBtaWdodCBoYXZlIGJlZW4gZW1wdHkgc28gd2UgZmlsbCB0aGVtIHdpdGggemVybwoJCQlmb3IoaW50IGk9MDtpPGQ7aSsrKQoJCQl7CgkJCQl2W2ldLnB1c2goMCk7CgkJCX0KCQkJLy9zb3J0IHZlY3RvciBhYy4gdG8gU2kKCQkJCgkJCXNvcnQocC5yYmVnaW4oKSxwLnJlbmQoKSk7CgkJCQoJCQkvL3AgY29udGFpbnMgZXZlcnkgdGVhY2hlcnMgU2kgRGkgVGkKCQkJZm9yKGludCBpPTA7aTxwLnNpemUoKTtpKyspCgkJCXsKCQkJCS8vY291bnQga2VlcHMgdHJhY2sgb2YgdGhlIHRvdGFsIGxlY3R1cmVzIHRha2VuIGJ5IGEgdHJhaW5lcgoJCQkJLy8gd2Ugd29kIHN0YXJ0IGRlbGV0aW5nIHRoZSBlbGVtZW50IGluIHRoZSBxdWV1ZSB3aGVuIHRoZSBjb3VudCBvZiBhIHRyYWluZXJzIGVxdWFscyB0aGUgbWF4IHZhbHVlIHRoYXQgaGUgY2FuIHRha2UKCQkJCWludCBjb3VudD0wOwoJCQkJCgkJCQkvL3BbaV0uc2VjLmZzIGlzIHRoZSBmaXJzdCBkYXkgb2YgdGVhY2hpbmcgb2YgaXRoIHRlYWNoZXIKCQkJCS8vc28gcFtpXS5zZWMuZnMgLTEgaXMgdGhlIGluZGV4IGluIHByaW9yaXR5IHF1ZXVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRheQoJCQkJLy93ZSBpdGVyYXRlIHRpbGwgdGhlIGxhc3QgZGF5IGhlIGNvdWxkIHRlYWNoIHdoaWNoIGlzIGxvY2F0ZWQgYXQgaW5kZXggZC0xCgkJCQlmb3IoaW50IGo9cFtpXS5zZWMuZnMtMTtqPGQ7aisrKQoJCQkJewoJCQkJCWlmKHBbaV0uZnM9PXZbal0udG9wKCkpCgkJCQkJewoJCQkJCQlpZihjb3VudD49cFtpXS5zZWMuc2VjKXZbal0ucG9wKCk7CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJLy9taW51cyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBudW1iZXIgb2YgZGF5cyBmb3Igd2hpY2ggdGhlIAoJCQkJCQkJLy90ZWFjaGVyIGhhcyBiZWVuIGFzc2lnbmVkCgkJCQkJCQkvL2lmIG1pbnVzID09IGQgd2UgaGF2ZSBzb2x2ZWQgZm9yIHRoZSB3aG9sZSBkYXlzCgkJCQkJCQljb3VudCsrOwoJCQkJCQkJbWludXMrKzsKCQkJCQkJCS8vZGVjcmVhc2UgdGhlIHZhbHVlIG9mIGZyb250IG9mIHRoZSBxdWV1ZSB3aGljaCBpcyB0aGUgU2kgb2YgdGhlIHRyYWluZXIKCQkJCQkJCS8vIGZyb20gc3VtIHdoZW4gdGhlIHRyYWluZXIgaGFzIGJlZW4gYXNzaWduZWQgb24gYSBkYXkKCQkJCQkJCXN1bS09dltqXS50b3AoKTsKCQkJCQkJCS8vd2UgcHVzaCBpbnRtYXggdG8gYXZvaWQgcmVwZXRpdGlvbiBpbiBjb3VudGluZwoJCQkJCQkJLy9hbmQgdG8ga25vdyB0aGF0IHRoZSBkYXlzIHByb2JsZW0gaGFzIGJlZW4gc29sdmVkCgkJCQkJCQl2W2pdLnB1c2goSU5UX01BWCk7CgkJCQkJCQlpZihtaW51cz09ZClicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCQlpZihtaW51cz09ZClicmVhazsKCQkJfQoJCQkJY291dDw8c3VtPDxlbmRsOwkKCQl9Cgl9Cn0KIA==