#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
****************************************************************/