public int maxValueOfCoins(List<List<Integer>> piles, int k) {
        int[] dp = new int[k + 1];
        int m = piles.size();
        List<Integer> list = piles.get(0);
        for (int i = 0; i < list.size() && i < k; i++) {
            dp[i + 1] = dp[i] + list.get(i);
        }

        for (int i = 1; i < m; i++) {
            List<Integer> row = piles.get(i);
            for (int j = k; j >= 0 ; j--) {
                int sum = 0;
                for (int t = 0; t < row.size() && t < j; t++) {
                    sum += row.get(t);
                    dp[j] = Math.max(dp[j], dp[j - t -1] + sum);
                }
            }
        }
        return dp[k];
    }