#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int V, M, N;
cin >> V >> M >> N;
vector<int> volumes(N), masses(N), calories(N);
for(int i = 0; i < N; ++i) {
cin >> volumes[i] >> masses[i] >> calories[i];
}
// dp[i][j][k] 表示在体积不超过i,质量不超过j的情况下,能够达到的最大卡路里值
vector<vector<vector<int>>> dp(V+1, vector<vector<int>>(M+1, vector<int>(N+1, 0)));
for(int i = 1; i <= N; ++i) {
for(int j = 0; j <= V; ++j) {
for(int k = 0; k <= M; ++k) {
// 如果当前食品的体积或质量超过了限制,则不能装入,最大卡路里与上一个食品相同
if(j < volumes[i-1] || k < masses[i-1]) {
dp[j][k][i] = dp[j][k][i-1];
} else {
// 如果可以装入,则比较不装入和装入该食品后的卡路里值,取最大值
dp[j][k][i] = max(dp[j][k][i-1], dp[j-volumes[i-1]][k-masses[i-1]][i-1] + calories[i-1]);
}
}
}
}
cout << dp[V][M][N] << endl;
return 0;
}
/**************************************************************
Problem: 2075
User: zhengzihao
Language: C++
Result: Accepted
Time:1296 ms
Memory:23448 kb
****************************************************************/