// 2693 #include using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); const long INF = 1L << 62; const long MX = (long)1e18 + 1; int N, K; long P; cin >> N >> P >> K; vector T(N+1), B(N+1); for (int i = 1; i <= N; i++) { cin >> T[i] >> B[i]; } // dp[i][j]: i番目まででj個装備した時の攻撃力の最大値 vector> dp(N+1, vector(K+1, -1)); dp[0][0] = P; for (int i = 1; i <= N; i++) { dp[i] = dp[i-1]; for (int j = 1; j <= K; j++) { if (T[i] == 1) { dp[i][j] = max(dp[i][j], dp[i-1][j-1] + B[i]); } else { dp[i][j] = max(dp[i][j], dp[i-1][j-1] * 2); } dp[i][j] = min(dp[i][j], MX); } } long ans = dp[N][K]; if (ans >= MX) ans = -1; cout << ans << endl; return 0; }