import sys

R, C, K = map(int, input().split())
item = [[0] * (C + 1) for _ in range(R + 1)]  # dp配列と合わせるために, 0行目, 0列目を追加している.
for s in sys.stdin.readlines():
    r, c, v = map(int, s.split())
    item[r][c] = v

dp = [[[0] * (C + 1) for _ in range(R + 1)] for _ in range(4)]
for i in range(R + 1):
    for j in range(C + 1):
        for k in range(4):
            here = dp[k][i][j]
            # 次の行に移動する場合
            if i + 1 <= R:
                # 移動先のアイテムを取らない場合
                dp[0][i + 1][j] = max(dp[0][i + 1][j], here)
                # 移動先のアイテムを取る場合
                dp[1][i + 1][j] = max(dp[1][i + 1][j], here + item[i + 1][j])
            # 次の列に移動する場合
            if j + 1 <= C:
                # 移動先のアイテムを取らない場合
                dp[k][i][j + 1] = max(dp[k][i][j + 1], here)
                # 現在のkが3未満のときのみ, 移動先のアイテムを取ることが可能
                if k < 3:
                    dp[k + 1][i][j + 1] = max(dp[k + 1][i][j + 1], here + item[i][j + 1])
ans = 0
for k in range(4):
    ans = max(ans, dp[k][-1][-1])
print(ans) import sys sys R, C, K = map(int, input().split()) R map(int, input().split()) map int input().split() ().split () input split C K [0] * (C + 1) for _ in range(R + 1) for _ in range(R + 1) _ range(R + 1) range R + 1 R 1 for _ in range(R + 1) [0] * (C + 1) [0] 0 C + 1 C 1 item = [[0] * (C + 1) for _ in range(R + 1)] item [[0] * (C + 1) for _ in range(R + 1)] for s in sys.stdin.readlines():
    r, c, v = map(int, s.split())
    item[r][c] = v s sys.stdin.readlines() sys.stdin.readlines sys.stdin sys stdin readlines r, c, v = map(int, s.split()) r map(int, s.split()) map int s.split() s.split s split c v item[r][c] = v item[r][c] [r] item r c v [[0] * (C + 1) for _ in range(R + 1)] for _ in range(4) for _ in range(4) _ range(4) range 4 for _ in range(4) [[0] * (C + 1) for _ in range(R + 1)] dp = [[[0] * (C + 1) for _ in range(R + 1)] for _ in range(4)] dp [[[0] * (C + 1) for _ in range(R + 1)] for _ in range(4)] for i in range(R + 1):
    for j in range(C + 1):
        for k in range(4):
            here = dp[k][i][j]
            # 次の行に移動する場合
            if i + 1 <= R:
                # 移動先のアイテムを取らない場合
                dp[0][i + 1][j] = max(dp[0][i + 1][j], here)
                # 移動先のアイテムを取る場合
                dp[1][i + 1][j] = max(dp[1][i + 1][j], here + item[i + 1][j])
            # 次の列に移動する場合
            if j + 1 <= C:
                # 移動先のアイテムを取らない場合
                dp[k][i][j + 1] = max(dp[k][i][j + 1], here)
                # 現在のkが3未満のときのみ, 移動先のアイテムを取ることが可能
                if k < 3:
                    dp[k + 1][i][j + 1] = max(dp[k + 1][i][j + 1], here + item[i][j + 1]) i range(R + 1) range R + 1 R 1 for j in range(C + 1):
        for k in range(4):
            here = dp[k][i][j]
            # 次の行に移動する場合
            if i + 1 <= R:
                # 移動先のアイテムを取らない場合
                dp[0][i + 1][j] = max(dp[0][i + 1][j], here)
                # 移動先のアイテムを取る場合
                dp[1][i + 1][j] = max(dp[1][i + 1][j], here + item[i + 1][j])
            # 次の列に移動する場合
            if j + 1 <= C:
                # 移動先のアイテムを取らない場合
                dp[k][i][j + 1] = max(dp[k][i][j + 1], here)
                # 現在のkが3未満のときのみ, 移動先のアイテムを取ることが可能
                if k < 3:
                    dp[k + 1][i][j + 1] = max(dp[k + 1][i][j + 1], here + item[i][j + 1]) j range(C + 1) range C + 1 C 1 for k in range(4):
            here = dp[k][i][j]
            # 次の行に移動する場合
            if i + 1 <= R:
                # 移動先のアイテムを取らない場合
                dp[0][i + 1][j] = max(dp[0][i + 1][j], here)
                # 移動先のアイテムを取る場合
                dp[1][i + 1][j] = max(dp[1][i + 1][j], here + item[i + 1][j])
            # 次の列に移動する場合
            if j + 1 <= C:
                # 移動先のアイテムを取らない場合
                dp[k][i][j + 1] = max(dp[k][i][j + 1], here)
                # 現在のkが3未満のときのみ, 移動先のアイテムを取ることが可能
                if k < 3:
                    dp[k + 1][i][j + 1] = max(dp[k + 1][i][j + 1], here + item[i][j + 1]) k range(4) range 4 here = dp[k][i][j] here dp[k][i][j] [i] [k] dp k i j if i + 1 <= R:
                # 移動先のアイテムを取らない場合
                dp[0][i + 1][j] = max(dp[0][i + 1][j], here)
                # 移動先のアイテムを取る場合
                dp[1][i + 1][j] = max(dp[1][i + 1][j], here + item[i + 1][j])
            # 次の列に移動する場合
             i + 1 <= R i + 1 i 1 R dp[0][i + 1][j] = max(dp[0][i + 1][j], here) dp[0][i + 1][j] [i + 1] [0] dp 0 i + 1 i 1 j max(dp[0][i + 1][j], here) max dp[0][i + 1][j] [i + 1] [0] dp 0 i + 1 i 1 j here dp[1][i + 1][j] = max(dp[1][i + 1][j], here + item[i + 1][j]) dp[1][i + 1][j] [i + 1] [1] dp 1 i + 1 i 1 j max(dp[1][i + 1][j], here + item[i + 1][j]) max dp[1][i + 1][j] [i + 1] [1] dp 1 i + 1 i 1 j here + item[i + 1][j] here item[i + 1][j] [i + 1] item i + 1 i 1 j if j + 1 <= C:
                # 移動先のアイテムを取らない場合
                dp[k][i][j + 1] = max(dp[k][i][j + 1], here)
                # 現在のkが3未満のときのみ, 移動先のアイテムを取ることが可能
                if k < 3:
                    dp[k + 1][i][j + 1] = max(dp[k + 1][i][j + 1], here + item[i][j + 1]) j + 1 <= C j + 1 j 1 C dp[k][i][j + 1] = max(dp[k][i][j + 1], here) dp[k][i][j + 1] [i] [k] dp k i j + 1 j 1 max(dp[k][i][j + 1], here) max dp[k][i][j + 1] [i] [k] dp k i j + 1 j 1 here if k < 3:
                    dp[k + 1][i][j + 1] = max(dp[k + 1][i][j + 1], here + item[i][j + 1]) k < 3 k 3 dp[k + 1][i][j + 1] = max(dp[k + 1][i][j + 1], here + item[i][j + 1]) dp[k + 1][i][j + 1] [i] [k + 1] dp k + 1 k 1 i j + 1 j 1 max(dp[k + 1][i][j + 1], here + item[i][j + 1]) max dp[k + 1][i][j + 1] [i] [k + 1] dp k + 1 k 1 i j + 1 j 1 here + item[i][j + 1] here item[i][j + 1] [i] item i j + 1 j 1 ans = 0 ans 0 for k in range(4):
    ans = max(ans, dp[k][-1][-1]) k range(4) range 4 ans = max(ans, dp[k][-1][-1]) ans max(ans, dp[k][-1][-1]) max ans dp[k][-1][-1] [-1] [k] dp k -1 -1 print(ans) print ans K = map(int, input().split()) map(int, input().split()) K here = dp[k][i][j] dp[k][i][j] here C, K = map(int, input().split()) map(int, input().split()) C c, v = map(int, s.split()) map(int, s.split()) c dp = [[[0] * (C + 1) for _ in range(R + 1)] for _ in range(4)] [[[0] * (C + 1) for _ in range(R + 1)] for _ in range(4)] dp ans = max(ans, dp[k][-1][-1]) max(ans, dp[k][-1][-1]) ans r, c, v = map(int, s.split()) map(int, s.split()) r ans = 0 0 ans R, C, K = map(int, input().split()) map(int, input().split()) R v = map(int, s.split()) map(int, s.split()) v item = [[0] * (C + 1) for _ in range(R + 1)] [[0] * (C + 1) for _ in range(R + 1)] item
import sys

R, C, K = map(int, input().split())
item = [[0] * (C + 1) for _ in range(R + 1)]  # dp配列と合わせるために, 0行目, 0列目を追加している.
for s in sys.stdin.readlines():
    r, c, v = map(int, s.split())
    item[r][c] = v

dp = [[[0] * (C + 1) for _ in range(R + 1)] for _ in range(4)]
for i in range(R + 1):
    for j in range(C + 1):
        for k in range(4):
            here = dp[k][i][j]
            # 次の行に移動する場合
            if i + 1 <= R:
                # 移動先のアイテムを取らない場合
                dp[0][i + 1][j] = max(dp[0][i + 1][j], here)
                # 移動先のアイテムを取る場合
                dp[1][i + 1][j] = max(dp[1][i + 1][j], here + item[i + 1][j])
            # 次の列に移動する場合
            if j + 1 <= C:
                # 移動先のアイテムを取らない場合
                dp[k][i][j + 1] = max(dp[k][i][j + 1], here)
                # 現在のkが3未満のときのみ, 移動先のアイテムを取ることが可能
                if k < 3:
                    dp[k + 1][i][j + 1] = max(dp[k + 1][i][j + 1], here + item[i][j + 1])
ans = 0
for k in range(4):
    ans = max(ans, dp[k][-1][-1])
print(ans)