#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(i,n) for(int (i)=0;(i)<(int)(n);++(i)) #define rer(i,l,u) for(int (i)=(int)(l);(i)<=(int)(u);++(i)) #define reu(i,l,u) for(int (i)=(int)(l);(i)<(int)(u);++(i)) #if defined(_MSC_VER) || __cplusplus > 199711L #define aut(r,v) auto r = (v) #else #define aut(r,v) __typeof(v) r = (v) #endif #define each(it,o) for(aut(it, (o).begin()); it != (o).end(); ++ it) #define all(o) (o).begin(), (o).end() #define pb(x) push_back(x) #define mp(x,y) make_pair((x),(y)) #define mset(m,v) memset(m,v,sizeof(m)) #define INF 0x3f3f3f3f #define INFL 0x3f3f3f3f3f3f3f3fLL using namespace std; typedef vector vi; typedef pair pii; typedef vector > vpii; typedef long long ll; template inline void amin(T &x, U y) { if(y < x) x = y; } template inline void amax(T &x, U y) { if(x < y) x = y; } int point(int a, int b) { if((a + 2) % 3 == b) return 3; else if(a == b) return 1; else return 0; } int main() { int G, C, P; cin >> G >> C >> P; string S; cin >> S; vector > dp(G+1, vector(C+1, vi(P+1, -1))); dp[G][C][P] = 0; for(int i = G; i >= 0; -- i) for(int j = C; j >= 0; -- j) for(int k = P; k >= 0; -- k) { int x = dp[i][j][k]; if(x == -1) continue; int p = S.size() - (i + j + k); int a = S[p] == 'G' ? 0 : S[p] == 'C' ? 1 : 2; // cerr << i << ", " << j << ", " << k << ": " << x << endl; if(i > 0) amax(dp[i-1][j][k], x + point(a, 0)); if(j > 0) amax(dp[i][j-1][k], x + point(a, 1)); if(k > 0) amax(dp[i][j][k-1], x + point(a, 2)); } int ans = dp[0][0][0]; printf("%d\n", ans); return 0; }