#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<numeric>
#include<string>
#include<stack>
#include<queue>
#include<string.h>
#include<array>
#include<climits>
#include<algorithm>
#include<cmath>
using namespace std;
#define ff first
#define ss second
#define int long long
#define pb push_back
#define endl '\n'
const int maxn = 1e5 + 2;
const int Mx = 1e12;
const int oo = 1e18;
const int LG = 20;
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m, k;
cin >> n >> m >> k;
vector<pair<int, pair<int, int>>> p, p1;
for(int i = 0; i < n; i++){
int u, v;
cin >> u >> v;
p.push_back({u, {v, i}});
p1.push_back({v, {u, i}});
}
sort(p.rbegin(), p.rend());
int id = 0;
int cur = 0;
vector<bool> seen(n, false);
for(int i = 0; i < n; i++){
if(id == m) break;
if(p[i].ff < p[i].ss.ff) continue;
cur += p[i].ff;
seen[p[i].ss.ss] = true;
id += 1;
}
sort(p.rbegin(), p.rend());
sort(p1.rbegin(), p1.rend());
int id1 = 0;
int cur1 = 0;
for(int i = 0; i < n; i++){
if(id1 == k) break;
if(seen[p1[i].ss.ss] == true) continue;
cur1 += p1[i].ff;
id1 += 1;
}
int ans1 = cur + cur1;
vector<bool> seen1(n, false);
int D = 0, D1 = 0;
int sum = 0, sum1 = 0;
for(int i = 0; i < n; i++){
if(D == k) break;
sum += p1[i].ff;
seen1[p1[i].ss.ss] = true;
D += 1;
}
// for(auto T : p1){
// cout << T.ff << " " << T.ss.ff;
// cout << endl;
// }
// return 0;
for(int i = 0; i < n; i++){
if(D1 == m) break;
if(seen1[p[i].ss.ss] == true) continue;
sum1 += p[i].ff;
D1 += 1;
}
cout << max(ans1, sum + sum1);
}