#include <iostream>
#include <bitset>
#include <string>
#include <map>
#include <vector>
#include <climits>
using namespace std;
const int MAXN = 100 + 5;
int n, m, q;
int dx[4] = { 0, 0, 1, -1 };
int dy[4] = { 1, -1, 0 , 0 };
#define pr pair
int mp[MAXN][MAXN];
bool vis[MAXN];
int sum[MAXN], sum1[MAXN];
map<pair<int, int>, int> ls;
int xb = 1;
int zy[MAXN][10];
int main() {
int len = 0;
cin >> n >> m >> q;
int _q = q;
for (int i = 1; i <= q; i++) {
int x, y, ssum;
cin >> x >> y >> ssum;
if (ls[make_pair(x, y)] == 0) {
ls[make_pair(x, y)] = xb++;
}
mp[x][y] += ssum;
sum[ls[make_pair(x, y)]] += ssum;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
vector<int> d;
int sum = 0;
for (int z = 0; z < 4; z++) {
int nx = i + dx[z];
int ny = j + dy[z];
if (nx < 1 || nx > n || ny < 1 || ny > m || !mp[nx][ny]) {
continue;
}
sum++;
d.push_back(ls[make_pair(nx, ny)]);
}
if (sum == 0) {
continue;
}
if (sum == 1) {
if (vis[d[0]] == 0) {
vis[d[0]] = 1;
zy[++len][1] = d[0];
}
else {
continue;
}
}
else {
zy[++len][1] = d[0];
for (int k = 1; k < d.size(); k++) {
zy[len][k + 1] = d[k];
}
}
}
}
int result = INT_MAX;
for (int k = 0; k < (1 << (2 * len)); k++) {
int ssum = 0;
for (int i = 1; i <= _q; i++) {
sum1[i] = sum[i];
}
int __q = _q;
for (int i = 0; i < len; i++) {
int now = (k >> (2 * i)) & 0x3;
if (now == 0) continue;
ssum += now;
for (int j = 1; j < 10; j++) {
if (zy[i + 1][j] == 0) {
continue;
}
int mb = zy[i + 1][j];
if (sum1[mb] <= 0) {
continue;
}
else {
sum1[mb] -= now;
if (sum1[mb] <= 0) {
__q--;
}
}
}
}
if (__q == 0) {
result = min(result, ssum);
}
}
cout << result << endl;
return 0;
}