Optimal maintenance policies for coherent sytems with multi-type components