Python solution
```\nimport heapq\n\n\nclass Solution:\n    def kSum(self, nums: List[int], k: int) -> int:\n        heap = []\n        \n        # get maximal subsequence sum\
```\nimport heapq\n\n\nclass Solution:\n    def kSum(self, nums: List[int], k: int) -> int:\n        heap = []\n        \n        # get maximal subsequence sum\n        max_subset = sum(n for n in nums if n > 0)\n        removal_candidates = list(sorted(nums, key=lambda x: abs(x)))\n        \n        # keep max_heap of next largest subset sum\n        heap.append((-max_subset, -1))\n        ans = max_subset\n\n        # pop k times\n        for _ in range(k):\n            candidate, idx = heapq.heappop(heap)\n            ans = min(ans, -candidate)\n            \n            # while we still have items to remove, create new candidate subseq sum\n            if idx + 1 < len(removal_candidates):\n                # remove candidate element and keep track of last index\n                heapq.heappush(heap, (candidate + abs(removal_candidates[idx + 1]), idx + 1))\n                # if we need to readd elements previously removed\n                if idx >= 0:\n                    heapq.heappush(heap, (candidate - abs(removal_candidates[idx]) + abs(removal_candidates[idx + 1]), idx + 1))\n\n        return ans
[]