Python Greedy
\nclass Solution:\n    def maxNumber(self, nums1, nums2, k):\n        """\n        :type nums1: List[int]\n        :type nums2: List[int]\n        :type k: int\
```\nclass Solution:\n    def maxNumber(self, nums1, nums2, k):\n        """\n        :type nums1: List[int]\n        :type nums2: List[int]\n        :type k: int\n        :rtype: List[int]\n        """\n        n, m = len(nums1), len(nums2)\n        ans = [0] * k\n        for i in range(0, k+1):\n            j = k - i\n            if i > n or j > m: \n                continue\n                \n            left = self.maxOneNumber(nums1, n, i)\n            right = self.maxOneNumber(nums2, m, j)\n            cur = self.merge(collections.deque(left), collections.deque(right))\n            ans = max(ans, cur)\n\n        return ans\n    \n    def maxOneNumber(self, nums, n, k):\n        ans = [-1] * k\n        j = 0\n        for i in range(n):\n            while n - i > k - j and j > 0 and ans[j-1] < nums[i]:\n                j -= 1\n            if j < k:\n                ans[j] = nums[i]\n                j += 1\n        return ans\n    \n    def merge(self, nums1, nums2):\n        ans = []\n        while nums1 or nums2:\n            if nums1 > nums2:\n                ans.append(nums1.popleft())\n            else:\n                ans.append(nums2.popleft())\n        return ans\n            \n        \n    \n            \n                \n```
[]