UPCORE: Utility-Preserving Coreset Selection for Balanced Unlearning