class Solution {
public:
long long maxScore(vector<int>& nums1, vector<int>& nums2, int k) {
int size = nums1.size();
vector<pair<int, int>> pairs(size);
for(int i = 0; i < size; i++) {
pairs.push_back(make_pair(nums1[i], nums2[i]));
}
sort(pairs.begin(), pairs.end(), [](pair<int, int> a, pair<int, int> b) {
return (a.second > b.second);
});
priority_queue<int, vector<int>, greater<int>> minh;
long long currSum = 0;
long long maxSum = INT_MIN;
for(int i = 0; i < size; i++) {
currSum += pairs[i].first;
minh.push(pairs[i].first);
if(minh.size() > k) {
currSum -= minh.top();
minh.pop();
}
if(minh.size() == k) {
maxSum = max(maxSum, (currSum * pairs[i].second));
}
}
return maxSum;
}
};