class Solution:
def maxNumber(self, nums1: List[int], nums2: List[int], k: int) -> List[int]:
def max_numbers(nums, k_):
stack = []
drops = len(nums) - k_
for num in nums:
while drops and stack and stack[-1] < num:
stack.pop()
drops -= 1
stack.append(num)
return stack[:k_]
def merge(a, b):
stack = []
while a or b:
bigger = a if a > b else b
stack.append(bigger[0])
bigger.pop(0)
return stack
return max(merge(max_numbers(nums1, i), max_numbers(nums2, k - i)) for i in range(k + 1) if
i <= len(nums1) and k - i <= len(nums2))