#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define maxn 4010
using namespace std;
int a[maxn][maxn],d[maxn][maxn];
struct p
{
int idx,v;
};
int main()
{
int n,m,k,t;
scanf("%d%d%d%d",&n,&m,&k,&t);
while(k--)
{
int x,y,v;
scanf("%d%d%d",&x,&y,&v);
a[x][y]=v;
}
int ans=0;
for(int i=1;i<=n;++i)
{
deque<p> q;
for(int j=1;j<=t;++j)
{
while(!q.empty()&&q.back().v<=d[i-1][j]) q.pop_back();
q.push_back((p){j,d[i-1][j]});
}
for(int j=1;j<=m;++j)
{
d[i][j]=q.front().v+a[i][j];
while(!q.empty()&&q.front().idx<j-t) q.pop_front();
if(j+t<=m)
{
while(!q.empty()&&q.back().v<=d[i-1][j+t]) q.pop_back();
q.push_back((p){j+t,d[i-1][j+t]});
}
}
}
for(int i=1;i<=m;++i) ans=max(ans,d[n][i]);
printf("%d",ans);
}