Pagini recente » Cod sursa (job #2484264) | Cod sursa (job #1158322) | Cod sursa (job #2630920) | Cod sursa (job #1428952) | Cod sursa (job #1050605)
#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
const char infile[] = "input.in";
const char outfile[] = "output.out";
//ifstream cin(infile);
//ofstream cout(outfile);
const inline int min(const int &a, const int &b) { if( a > b ) return b; return a; }
const inline int max(const int &a, const int &b) { if( a < b ) return b; return a; }
const inline void Get_min(int &a, const int b) { if( a > b ) a = b; }
const inline void Get_max(long long &a, const long long b) { if( a < b ) a = b; }
string S;
long long nb, ns, nc, sb, ss, sc, pb, ps, pc, money;
inline bool Check(long long x) {
long long actb = max(x * sb - nb, 0LL) * pb;
long long acts = max(x * ss - ns, 0LL) * ps;
long long actc = max(x * sc - nc, 0LL) * pc;
return ((actb + acts + actc) <= money);
}
int main() {
cin >> S >> nb >> ns >> nc >> pb >> ps >> pc >> money;
for(long long i = 0, n = S.size() ; i < n ; ++ i) {
sb += (S[i] == 'B');
ss += (S[i] == 'S');
sc += (S[i] == 'C');
}
long long li = 0, ls = 2000000000000ll, Ans = 0;
while(li <= ls) {
long long mid = (li + ls) / 2;
if(Check(mid)) {
Ans = mid;
li = mid + 1;
}
else ls = mid - 1;
}
cout << li - 1 << '\n';
return 0;
}