private ArrayList<ArrayList<Integer>> helper(int[] candidates, int from, int target) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        if (target == 0) {
            result.add(new ArrayList<Integer>());
            return result;
        }
        for (int i = from; i < candidates.length && candidates[i] <= target; i++) {
            addTo(result, helper(candidates, i + 1, target - candidates[i]), candidates[i]);
        }
        return result;
    }