Contextual Dynamic Pricing with Heterogeneous Buyers