Optimal coded caching in heterogeneous networks with uncoded prefetching