#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
int stanum, staac, maxn, num;
struct edge
{
int u, v;
int val;
} e[33];
int a[10];
void dfs(int cur ,int pos)
{
int temp[10];
if(pos == num )
{
maxn = max(maxn , cur);
return ;
}
memcpy(temp, a, sizeof(a));
int i;
for(i = e[pos].u+1; i <= e[pos].v; i++)
{
if(a[i] + e[pos].val > staac)
break;
a[i] += e[pos].val;
}
if( i == e[pos].v + 1 )
dfs( cur + e[pos].val * (e[pos].v - e[pos].u), pos + 1);
memcpy(a, temp, sizeof(temp));
dfs(cur, pos + 1);
return ;
}
int main()
{
while(scanf("%d %d %d",&staac, &stanum, &num) != EOF && ( staac + stanum + num))
{
maxn = 0;
memset(a, 0, sizeof(a));
for( int i = 0; i < num; i++)
{
scanf("%d %d",&e[i].u, &e[i].v);
scanf("%d",&e[i].val);
}
dfs(0,0);
cout<<maxn<<endl;
}
}
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
int stanum, staac, maxn, num;
struct edge
{
int u, v;
int val;
} e[33];
int a[10];
void dfs(int cur ,int pos)
{
int temp[10];
if(pos == num )
{
maxn = max(maxn , cur);
return ;
}
memcpy(temp, a, sizeof(a));
int i;
for(i = e[pos].u+1; i <= e[pos].v; i++)
{
if(a[i] + e[pos].val > staac)
break;
a[i] += e[pos].val;
}
if( i == e[pos].v + 1 )
dfs( cur + e[pos].val * (e[pos].v - e[pos].u), pos + 1);
memcpy(a, temp, sizeof(temp));
dfs(cur, pos + 1);
return ;
}
int main()
{
while(scanf("%d %d %d",&staac, &stanum, &num) != EOF && ( staac + stanum + num))
{
maxn = 0;
memset(a, 0, sizeof(a));
for( int i = 0; i < num; i++)
{
scanf("%d %d",&e[i].u, &e[i].v);
scanf("%d",&e[i].val);
}
dfs(0,0);
cout<<maxn<<endl;
}
}