/* -*- coding: utf-8 -*- * * 2623.cc: No.2623 Room Allocation - yukicoder */ #include #include #include using namespace std; /* constant */ const int MAX_N = 200000; const int MAX_X = 200000; const int MAX_Y = 200000; const int MAX_M = MAX_X + MAX_Y; /* typedef */ typedef long long ll; typedef pair pli; /* global variables */ ll ps[MAX_N][2]; pli qs[MAX_N]; /* subroutines */ /* main */ int main() { int n, x, y; scanf("%d%d%d", &n, &x, &y); int m = x + y, k = min(n, m); for (int i = 0; i < n; i++) { int p; char cs[4]; scanf("%d%s", &p, cs); ps[i % m][cs[0] - 'A'] += p; } for (int i = 0; i < k; i++) qs[i] = {ps[i][1] - ps[i][0], i}; sort(qs, qs + k); ll sum = 0; int i = 0, j = k - 1; while (x > 0 && y > 0 && i <= j) { auto [di, ui] = qs[i]; auto [dj, uj] = qs[j]; if (-di >= dj) sum += ps[ui][0], x--, i++; else sum += ps[uj][1], y--, j--; } while (x > 0 && i <= j) { auto [di, ui] = qs[i]; sum += ps[ui][0], x--, i++; } while (y > 0 && i <= j) { auto [dj, uj] = qs[j]; sum += ps[uj][1], y--, j--; } printf("%lld\n", sum); return 0; }