#include <bits/stdc++.h>
using namespace std;
int dp[2][150001];
int a[301], t[301];
long long ans = 0;
deque<pair<int, int> > q1;
int main() {
  int n, m, d, tt, dis;
  scanf("%d %d %d", &n, &m, &d);
  for (int i = 1; i <= m; i++) scanf("%d %d %d", &a[i], &tt, &t[i]), ans += tt;
  for (int i = 1; i <= n; i++) dp[1][i] = abs(a[1] - i);
  for (int i = 2; i <= m; i++) {
    q1.clear();
    tt = 1 - (i & 1);
    dis = min((long long)n, (long long)d * (t[i] - t[i - 1]));
    q1.push_back(pair<int, int>(dp[tt][1], 1));
    for (int j = 2; j <= dis; j++) {
      while (!q1.empty() && q1.back().first >= dp[tt][j]) q1.pop_back();
      q1.push_back(pair<int, int>(dp[tt][j], j));
    }
    for (int j = 1; j <= n; j++) {
      if (j + dis <= n) {
        while (!q1.empty() && q1.back().first >= dp[tt][j + dis]) q1.pop_back();
        q1.push_back(pair<int, int>(dp[tt][j + dis], j + dis));
      }
      while (abs(q1.front().second - j) > dis) q1.pop_front();
      dp[i & 1][j] = q1.front().first + abs(a[i] - j);
    }
  }
  printf("%I64d\n", ans - *min_element(dp[m & 1] + 1, dp[m & 1] + 1 + n));
  return 0;
}
