#include using namespace std; int main() { int N, X, Y; cin >> N >> X >> Y; vector P(N, 0); vector c(N, 'A'); for(int i = 0; i < N; i++) cin >> P[i] >> c[i]; vector A(min(N, X+Y), 0LL), B(min(N, X+Y), 0LL); for(int i = 0; i < N; i++) { if(c[i] == 'A') A[i % (X+Y)] += (long long)P[i]; else B[i % (X+Y)] += (long long)P[i]; } long long res(0LL); int x(0), y(0); vector d(size(A), 'A'); for(int i = 0; i < size(A); i++) { if(A[i] < B[i]) { y++; d[i] = 'B'; } if(B[i] < A[i]) { x++; d[i] = 'A'; } if(A[i] == B[i]) { if(x < y) { x++; d[i] = 'A'; } else { y++; d[i] = 'B'; } } res += max(A[i], B[i]); } vector C(min(N, X+Y), 0LL); for(int i = 0; i < size(A); i++) C[i] = abs(A[i]-B[i]); if(X < x) { priority_queue pq; for(int i = 0; i < size(A); i++) { if(d[i] == 'A') pq.push(-C[i]); } for(int i = 0; i < x-X; i++) { res += pq.top(); pq.pop(); } } if(Y < y) { priority_queue pq; for(int i = 0; i < size(A); i++) { if(d[i] == 'B') pq.push(-C[i]); } for(int i = 0; i < y-Y; i++) { res += pq.top(); pq.pop(); } } cout << res << endl; return 0; }