import java.util.*;


public class Solution {
    public int maxValue (int[][] grid) {
        int[][] dp = new int[grid.length][grid[0].length];
        dp[0][0] = grid[0][0];
        for(int i = 0;i<grid.length;i++){
            for(int j = 0;j<grid[0].length;j++){
                if(i-1>=0&&j-1>=0){
                    dp[i][j] = grid[i][j]+Math.max(dp[i-1][j],dp[i][j-1]);
                }else if(i-1>=0){
                    dp[i][j] = grid[i][j]+dp[i-1][j];
                }else if(j-1>=0){
                    dp[i][j] = grid[i][j]+dp[i][j-1];
                }
            }
        }
        return dp[dp.length-1][dp[0].length-1];
    }
}