#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=2e3+10,M=1e7+10;
int m,n,l;
int f[M];
struct node{
int a,s,w;
}num[N];
bool cmp(node x,node y){
return x.a<y.a;
}
int cnt=0;
int g[N][N];
signed main()
{
// freopen("C:\\Users\\oilgz\\Desktop\\dp\\data\\data.in","r",stdin);
// freopen("C:\\Users\\oilgz\\Desktop\\dp\\data\\myans.in","w",stdout);
memset(f,100,sizeof f);
cin>>m>>l>>n;
int sum=0;
for(int i=1;i<=n;i++){
int a,s,w;
cin>>a>>s>>w;
int t=1;
while(s>t){
num[++cnt].a=a;
num[cnt].s=t;
num[cnt].w=w*t;
sum+=w*t;
s-=t;
t*=2;
}
num[++cnt].a=a;
num[cnt].s=s;
num[cnt].w=w*s;
sum+=w*s;
}
f[0]=0;
num[cnt+1].a=l;
sort(num+1,num+cnt+1,cmp);
memset(g,100,sizeof g);
g[0][0]=0;
for(int i=1;i<=cnt;i++){
for(int j=m;j>=0;j--){
if(j>=num[i].s)f[j]=min(f[j],f[j-num[i].s]+num[i].w);
if(f[j]<=1e9)f[j]+=j*j*(num[i+1].a-num[i].a);
}
}
if(f[m]>=1684322900)cout<<-1;
else cout<<f[m];
}