A branch-and-cut-and-price algorithm for the multi-depot heterogeneous vehicle routing problem with time windows