Optimal multi-class job scheduling on a single machine with sequence-dependent set-up and variable processing times