#include #define endl '\n' #define pb push_back using namespace std; const int maxn = 4e5 + 10; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } int n, k, m; long long a[maxn], b[maxn]; int used[maxn]; void solve() { //sort(a+1, a+n+1); //sort(b+1, b+n+1); vector < pair < int, int > > g, u; for (int i = 1; i <= n; ++ i) { g.pb(make_pair(a[i], i)); } for (int i = 1; i <= n; ++ i) u.pb(make_pair(b[i], i)); sort(g.begin(), g.end()); sort(u.begin(), u.end()); reverse(g.begin(), g.end()); reverse(u.begin(), u.end()); long long sum = 0; for (int i = 0; i < k; ++ i) { sum += g[i].first; used[g[i].second] = 1; } //cout << "sum from val" << sum << endl; vector < int > overlap; int leftm = m; vector < int > del; for (int i = 0; i < u.size(); ++ i) { if(leftm == 0)break; if(used[u[i].second] && i < m)overlap.pb(i); else if(!used[u[i].second]) { if(i >= m) { del.pb(u[i].first); } // leftm --; sum += u[i].first; used[u[i].second] = 1; leftm --; } } // cout << "_ sum from vik" << sum << endl; // cout << "overlap sz " << overlap.size() << endl; int j = k; vector < pair < int, int > > best; for (auto x: overlap) { best.pb(make_pair(b[x] - a[x], x)); } sort(best.begin(), best.end()); reverse(best.begin(), best.end()); int cnt = overlap.size(), i = 0; int cutbs = del.size()-1; long long ans = sum; assert(del.size() == overlap.size()); while(cnt --) { int index = best[i].second; sum -= a[index]; sum += b[index]; sum += a[j]; sum -= del[cutbs]; cutbs --; ans = max(ans, sum); i ++; j ++; } cout << ans << endl; // cout << sum << endl; } int main() { freopen("dodgeball2.in", "r", stdin); freopen("dodgeball2.out", "w", stdout); speed(); cin >> n >> k >> m; for (int i = 1; i <= n; ++ i) cin >> a[i]; for (int i = 1; i <= n; ++ i) cin >> b[i]; solve(); return 0; } /** 6 3 2 3 6 1 2 7 4 3 3 4 5 9 2 */