Simple Solution || (Using Recursion + Memoization) ✅✅
Code
# Code
```cpp []
class Solution {
public:
    int helper(vector<vector<int>>& coins,int i,int j,int n,int m,int k,vector<vector<vector<int>>> &dp){
        if(i==(n-1) && j==(m-1)){
            if(k>0 && coins[i][j]<0){
                return 0;
            }else{
                return coins[i][j];
            }
        }
        if(dp[i][j][k]!=-pow(10,7)){
            return dp[i][j][k];
        }
        int ans=-pow(10,7);
        if(coins[i][j]<0 && k>0){
            if((i+1)<n){
                ans=max(ans,helper(coins,i+1,j,n,m,k-1,dp));
            }
            if((j+1)<m){
                ans=max(ans,helper(coins,i,j+1,n,m,k-1,dp));
            }
        }
        if((i+1)<n){
            ans=max(ans,coins[i][j]+helper(coins,i+1,j,n,m,k,dp));
        }
        if((j+1)<m){
            ans=max(ans,coins[i][j]+helper(coins,i,j+1,n,m,k,dp));
        }
        return dp[i][j][k]=ans;
    }
    int maximumAmount(vector<vector<int>>& coins) {
        int n=coins.size();
        int m=coins[0].size();
        vector<vector<vector<int>>> dp(n,vector<vector<int>>(m,vector<int>(3,-pow(10,7))));
        return helper(coins,0,0,n,m,2,dp);
    }
};
```
['Recursion', 'Memoization', 'C++']