#include #include using namespace std; using namespace atcoder; typedef long long ll; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) static const double pi = 3.141592653589793; const ll INF = 1LL << 60; const ll mod = 1000000007; const ll imod = 998244353; using mint = modint998244353; vector dx = {1, 0, -1, 0}, dy = {0, 1, 0, -1}; ll P(ll x, ll n) { ll ret = 1; while (n > 0) { if (n & 1) ret *= x; x *= x; n >>= 1; } return ret; } void seek(bool f){ cout << (f ? "Yes" : "No") << endl; } int main(){ ll N; cin >> N; vector A(N), B(N); rep(i, N){ cin >> A[i] >> B[i]; } map ma; rep(i, N){ ll res = 2; while(A[i] % res == 0){ res *= 2; } if(res == 2){ ma[0] += B[i]; } else if(res == 4){ ma[1] += B[i]; } else if(res == 8){ ma[2] += B[i]; } else if(res >= 16){ ma[3] += B[i]; } } ll ans = 0; ans += ma[3]; if(ma[1] <= ma[2]){ ans += ma[1]; ma[2] -= ma[1]; ans += ma[2] / 2; } else{ ans += ma[2]; ma[1] -= ma[2]; ans += ma[1] / 3; } cout << ans << endl; }