A branch-and-price algorithm for the multilevel generalized assignment problem