#include using namespace std; #ifdef LOCAL #include "settings/debug.cpp" #define _GLIBCXX_DEBUG #else #define Debug(...) void(0) #endif #define rep(i, n) for (int i = 0; i < (n); ++i) using ll = long long; using ull = unsigned long long; int main() { int n, k; ll p; cin >> n >> p >> k; vector> v(n); rep(i, n) cin >> v[i].first >> v[i].second; constexpr ll INF = (ll) 1e18 + 1; vector dp(n + 1, vector(k + 1, -INF)); dp[0][0] = p; rep(i, n) { rep(j, k + 1) { if (dp[i][j] == -INF) continue; dp[i + 1][j] = max(dp[i + 1][j], dp[i][j]); if (j != k) { if (v[i].first == 1) { dp[i + 1][j + 1] = max(dp[i + 1][j + 1], min(dp[i][j] + v[i].second, INF)); } else { dp[i + 1][j + 1] = max(dp[i + 1][j + 1], min(dp[i][j] * 2, INF)); } } } } cout << (dp[n][k] == INF ? -1 : dp[n][k]) << endl; return 0; }