Examples
Input: (['H1', 'H2', 'H3'], ['M1', 'M2'], [('t_old1', 'H1', 'M1'), ('t_old2', 'H1', 'M2'), ('t_old3', 'H2', 'M1')], ['t4', 't5'])
Expected Output: [('t4', 'H2', 'M2'), ('t5', 'H3', 'M1')]
Explanation: Historical human loads are H1=2, H2=1, H3=0, so H2 and H3 are chosen. For models, M2 is used first because it has smaller historical load, then M1 wins the tie.
Input: (['Ann', 'Bob'], ['X'], [('taskA', 'Ann', 'X')], ['taskA'])
Expected Output: [('taskA', 'Bob', 'X')]
Explanation: Ann already labeled taskA in history, so Bob must take it.
Input: (['A', 'B'], ['M1', 'M2'], [('t1', 'A', 'M1'), ('t1', 'B', 'M2')], ['t1'])
Expected Output: []
Explanation: Both humans already labeled t1 before, so no valid assignment exists.
Input: (['A'], ['M'], [], [])
Expected Output: []
Explanation: Edge case: there are no new tasks to schedule.
Input: (['H1'], ['M1'], [], ['t1', 't2'])
Expected Output: []
Explanation: A human can complete at most one task today, so two tasks cannot be assigned with only one human.