Easy Solution
Intuition\nWhen there is a requirement of parsing all the paths then recursion is the only way to do that!\n\n# Approach\nAs there are only 4 directions to go, 
# Intuition\nWhen there is a requirement of parsing all the paths then recursion is the only way to do that!\n\n# Approach\nAs there are only 4 directions to go, i.e up left down right,\nso for every cell we take the maximum of all the values of the path till (0, 0) and return it.\nUltimately when it is greater than 0 we say true otherwise false\n\n# Complexity\n- Time complexity:\n<!-- Add your time complexity here, e.g. $$O(n)$$ -->\n\n- Space complexity:\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```cpp []\nclass Solution {\npublic:\n    int f(int row, int col, vector<vector<int>>& grid, int health, vector<vector<int>>& vis, vector<vector<vector<int>>>& dp) {\n        if (row == 0 && col == 0) return health - grid[row][col] > 0 ? health - grid[row][col]: -10e8;\n        if (row < 0 || col < 0 ||col >= grid[0].size()|| row >= grid.size() || health <= 0) return -10e8;\n        if(dp[row][col][health] != -1) return dp[row][col][health];\n\n        vis[row][col] = 1;\n\n        int rowd[] = {1, 0, -1, 0};\n        int cold[] = {0, 1, 0, -1};\n        int maxi = -10e8;\n\n        for (int i = 0; i < 4; i++) {\n            int nrow = row + rowd[i];\n            int ncol = col + cold[i];\n\n            if (nrow >= 0 && nrow < grid.size() && ncol >= 0 && ncol < grid[0].size() &&\n                !vis[nrow][ncol]) {\n                maxi = max(maxi, f(nrow, ncol, grid, health - grid[row][col], vis, dp));\n            }\n        }\n\n        vis[row][col] = 0;\n        return dp[row][col][health] = maxi;\n    }\n\n    bool findSafeWalk(vector<vector<int>>& grid, int health) {\n        int n = grid.size();\n        int m = grid[0].size();\n        vector<vector<int>> vis(n, vector<int>(m, 0));\n        vector<vector<vector<int>>> dp(n+1, vector<vector<int>>(m+1, vector<int> (health+1, -1)));\n        int ans = f(n - 1, m - 1, grid, health, vis, dp);\n        cout << ans;\n        return ans > 0;\n    }\n};\n```
['Dynamic Programming', 'Recursion', 'Memoization', 'C++']