#include<bits/stdc++.h>
#define N 1005
#define M 105
#define MAXT 2005
#define mod 1000000007
#define int1 int
using namespace std;
int1 n,k,m,i,j,l,len,d,dp[M][M][MAXT][2],ans = -1145141919,maxt,mm;
struct owo{
int1 x,b,t;
} a[M];
bool cmp(owo x,owo y){
if(x.x == y.x){
return x.t < y.t;
}
return x.x < y.x;
}
int1 read(){
int1 x = 0,f = 1;
char ch = getchar();
while(!isdigit(ch)){
if(ch == '-'){
f = -1;
}
ch = getchar();
}
while(isdigit(ch)){
x = (x << 1) + (x << 3) + ch - '0';
ch = getchar();
}
return x * f;
}
void print(int1 x){
if(x < 0){
putchar('-');
x = -x;
}
if(x > 9){
print(x / 10);
}
putchar(x % 10 + 48);
return ;
}
int main(){
n = read(),k = read(),m = read() + 1,a[m] = {k,0,1};
for(i = 1; i < m; i++){
a[i].x = read(),a[i].b = read(),a[i].t = read(),maxt = max(maxt,a[i].t);
}
sort(a + 1,a + m + 1,cmp);
for(i = 0; i <= 100; i++){
for(j = 0; j <= 100; j++){
for(l = 0; l <= 2000; l++){
dp[i][j][l][0] = dp[i][j][l][1] = -1145141919;
}
}
}
for(i = 1; i <= m; i++){
if(!a[i].b){
dp[i][i][1][0] = dp[i][i][1][1] = 0;
break;
}
}
for(len = 2; len <= m; len++){
mm = m - len + 1;
for(i = 1; i <= mm; i++){
j = i + len - 1;
for(l = maxt; l >= 1; l--){
d = abs(a[i + 1].x - a[i].x);
if(l > d){
dp[i][j][l][0] = max(dp[i][j][l][0],dp[i + 1][j][l - d][0] + (l <= a[i].t) * a[i].b),ans = max(ans,dp[i][j][l][0]);
}
d = abs(a[j].x - a[i].x);
if(l > d){
dp[i][j][l][0] = max(dp[i][j][l][0],dp[i + 1][j][l - d][1] + (l <= a[i].t) * a[i].b),ans = max(ans,dp[i][j][l][0]);
}
d = abs(a[j - 1].x - a[j].x);
if(l > d){
dp[i][j][l][1] = max(dp[i][j][l][1],dp[i][j - 1][l - d][0] + (l <= a[j].t) * a[j].b),ans = max(ans,dp[i][j][l][1]);
}
d = abs(a[j].x - a[i].x);
if(l > d){
dp[i][j][l][1] = max(dp[i][j][l][1],dp[i][j - 1][l - d][1] + (l <= a[j].t) * a[j].b),ans = max(ans,dp[i][j][l][1]);
}
}
}
}
print(ans);
return 0;
}