#include<bits/stdc++.h>
#define up(l,r,i) for(int i=l;i<=r;i++)
typedef long long ll;
using namespace std;
const int N=4e3+5;
int read(){
int res=0;char c;
c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9'){
res=res*10+c-'0';
c=getchar();
}return res;
}
ll n,m,k,t,l,r;
ll a[N][N];
ll f[N][N],ans;
deque<int>q;
int main(){
n=read();m=read();k=read();t=read();
int x,y,z;
up(1,k,i){
x=read();y=read();z=read();
a[x][y]=z;
}
up(1,n,i){
l=1-t;r=1;
while(r<=t+1) {
while(!q.empty()&&f[i-1][q.back()]<=f[i-1][r]) q.pop_back();
q.push_back(r);
r++;
}
up(1,m,j){
while(!q.empty()&&q.front()<l) q.pop_front();
while(!q.empty()&&f[i-1][q.back()]<=f[i-1][r]) q.pop_back();
q.push_back(r);
f[i][j]=f[i-1][q.front()]+a[i][j];
l++;if(r<m)r++;
}
while(!q.empty()) q.pop_back();
}
up(1,m,i)
ans=max(ans,f[n][i]);
printf("%lld\n",ans);
return 0;
}