<p>There is a bag that consists of items, each item&nbsp;has a number <code>1</code>, <code>0</code>, or <code>-1</code> written on it.</p>

<p>You are given four <strong>non-negative </strong>integers <code>numOnes</code>, <code>numZeros</code>, <code>numNegOnes</code>, and <code>k</code>.</p>

<p>The bag initially contains:</p>

<ul>
	<li><code>numOnes</code> items with <code>1</code>s written on them.</li>
	<li><code>numZeroes</code> items with <code>0</code>s written on them.</li>
	<li><code>numNegOnes</code> items with <code>-1</code>s written on them.</li>
</ul>

<p>We want to pick exactly <code>k</code> items among the available items. Return <em>the <strong>maximum</strong> possible sum of numbers written on the items</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> numOnes = 3, numZeros = 2, numNegOnes = 0, k = 2
<strong>Output:</strong> 2
<strong>Explanation:</strong> We have a bag of items with numbers written on them {1, 1, 1, 0, 0}. We take 2 items with 1 written on them and get a sum in a total of 2.
It can be proven that 2 is the maximum possible sum.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> numOnes = 3, numZeros = 2, numNegOnes = 0, k = 4
<strong>Output:</strong> 3
<strong>Explanation:</strong> We have a bag of items with numbers written on them {1, 1, 1, 0, 0}. We take 3 items with 1 written on them, and 1 item with 0 written on it, and get a sum in a total of 3.
It can be proven that 3 is the maximum possible sum.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>0 &lt;= numOnes, numZeros, numNegOnes &lt;= 50</code></li>
	<li><code>0 &lt;= k &lt;= numOnes + numZeros + numNegOnes</code></li>
</ul>

class Solution:
    def kItemsWithMaximumSum(self, numOnes: int, numZeros: int, numNegOnes: int, k: int) -> int:
        # Priority of items to maximize sum: 1 > 0 > -1
        # First, take as many '1's as possible,
        # then take '0's if we still need more,
        # finally, take '-1's if needed.

        # Compute how many '1's we can take
        ones_to_take = min(numOnes, k)
        current_sum = ones_to_take  # Each '1' contributes +1 to the sum
        k -= ones_to_take  # Reduce k by the number of '1's taken

        # Compute how many '0's we can take
        zeros_to_take = min(numZeros, k)
        # '0' items do not change the sum, so we don't change current_sum
        k -= zeros_to_take  # Reduce k by the number of '0's taken

        # Compute how many '-1's we need to take (if any k is still left)
        negOnes_to_take = min(numNegOnes, k)
        current_sum -= negOnes_to_take  # Each '-1' contributes -1 to the sum
        k -= negOnes_to_take  # Reduce k by the number of '-1's taken

        # Return the computed sum
        return current_sum

# Example usage
solution = Solution()
print(solution.kItemsWithMaximumSum(3, 2, 0, 2))  # Output: 2
print(solution.kItemsWithMaximumSum(3, 2, 0, 4))  # Output: 3
33