A Branch-and-Cut Algorithm for the Multilevel Generalized Assignment Problem