classSolution {
public:longlong maxSum(vector<int>& nums, int m, int k) {
int n = nums.size();
unordered_map<int,int> cnt;
longlong sum =0;
longlong res =0;
int valid =0;
for (int i =0; i < k; i++) {
sum += nums[i];
if (cnt[nums[i]]++==0) valid++;
}
if (valid >= m) res = sum;
for (int i = k; i < n; i++) {
sum += (nums[i] - nums[i-k]);
if (cnt[nums[i]]++==0) valid++;
if (--cnt[nums[i-k]] ==0) valid--;
if (valid >= m) res = max(res, sum);
}
return res;
}
};