import heapq

def merge_k_arrays(arrays):
    heap = []
    for source, values in enumerate(arrays):
        if values:
            heap.append((values[0], source, 0))
    heapq.heapify(heap)
    output = []
    while heap:
        value, source, position = heapq.heappop(heap)
        output.append(value)
        position += 1
        if position < len(arrays[source]):
            heapq.heappush(heap, (arrays[source][position], source, position))
    return output
