#include<bits/stdc++.h>
using namespace std;
#define ll long long
namespace acac
{
ll ls[200010],dy[200010],ne[200010];
ll Q[200010];
map<int,int>mp;
int n,m,k,d,tot;
void init()
{
sort(ls+1,ls+1+2*m);
dy[0]=-1;
tot=0;
for(int i=1;i<=2*m;i++)
{
if(ls[i]!=ls[i-1])tot++;
mp[ls[i]]=tot;
dy[tot]=ls[i];
Q[tot]=ls[i]*d;
}
}
struct node
{
int l,r;
int val;
}line[100010];
bool cmp(node a,node b)
{
if(a.r==b.r)return a.l>b.l;
return a.r<b.r;
}
ll tree[800010][3],dp[200010];
void pd(int u)
{
if(tree[u][1])
{
tree[2*u][0]+=tree[u][1];
tree[2*u+1][0]+=tree[u][1];
tree[2*u][1]+=tree[u][1];
tree[2*u+1][1]+=tree[u][1];
tree[u][1]=0;
}
}
void pu(int u)
{
tree[u][0]=max(tree[2*u][0],tree[2*u+1][0]);
}
void c(int u,int l,int r,int L,int R,ll num)
{
if(l>R||L>r)return ;
if(L<=l&&R>=r)
{
tree[u][0]+=num;
tree[u][1]+=num;
return ;
}
pd(u);
int mid=(l+r)>>1;
c(2*u,l,mid,L,R,num);
c(2*u+1,mid+1,r,L,R,num);
pu(u);
}
ll qr(int u,int l,int r,int L,int R)
{
if(L>r||l>R||L>R)return 0;
if(L<=l&&R>=r)return tree[u][0];
pd(u);
int mid=(l+r)>>1;
return max(qr(2*u,l,mid,L,R),qr(2*u+1,mid+1,r,L,R));
}
void build(int u,int l,int r)
{
tree[u][1]=tree[u][0]=0;
if(l==r)
{
tree[u][0]=tree[u][1]=0;
return ;
}
int mid=(l+r)>>1;
build(2*u,l,mid);
build(2*u+1,mid+1,r);
pu(u);
}
int read()
{
int ans=0;
char ch=getchar();
while(ch<'0'||ch>'9')
{
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
ans=ans*10+ch-'0';
ch=getchar();
}
return ans;
}
int main()
{
int C=read(),T=read();
while(T--)
{
n=read(),m=read(),k=read(),d=read();
for(int i=1;i<=m;i++)
{
int y;
line[i].r=read(),y=read(),line[i].val=read();
line[i].l=line[i].r-y+1;
ls[i]=line[i].l;
ls[i+m]=line[i].r;
// cout<<line[i].l<<' '<<line[i].r<<endl;
}
init();
build(1,0,tot);
sort(line+1,line+1+m,cmp);
int w=1;
for(int i=1;i<=tot;i++)
{
dp[i]=dp[i-1];
int pos=upper_bound(dy,dy+1+tot,dy[i]-k)-dy,nx=(dy[i]-dy[i-1]==1)?i-2:i-1;
//cout<<pos<<' ';
c(1,0,tot,i,i,dp[nx]+Q[i]);
// cout<<Q[i]<<endl;
while(w<=m&&line[w].r==dy[i])
{
c(1,0,tot,0,mp[line[w].l],line[w].val);
w++;
}
dp[i]=max(dp[i],qr(1,0,tot,pos,i)-(dy[i]+1)*d);
// cout<<dp[i]<<' ';
}
cout<<dp[tot]<<'\n';
}
return 0;
}
}
int main()
{
// freopen("run2.in","r",stdin);
// freopen("wa.out","w",stdout);
acac::main();
return 0;
}
/*
1 1
10 5 8 2
5 5 9
9 5 8
5 3 5
6 5 7
2 1 5
out:
14
*/
萌新补题时被狠狠卡常了QWQ