#include using namespace std; template class y_combinator { F f; public: y_combinator(F&& f) : f(std::forward(f)) {} template auto operator()(Args&&... args) const { return f(*this, std::forward(args)...); } }; using ll = long long; using ld = long double; using u64 = uint64_t; using vi = vector; using vl = vector; using pii = pair; using pll = pair; template > using prique = std::priority_queue, U>; inline constexpr int popcnt(u64 x) noexcept { return __builtin_popcountll(x); } inline ll floor_div(ll a, ll b) noexcept { return a / b - (a % b && (a ^ b) < 0); } inline ll ceil_div(ll a, ll b) noexcept { return floor_div(a + b - 1, b); } template bool chmin(T& x, const T& y) noexcept { return (x > y ? x = y, true : false); } template bool chmax(T& x, const T& y) noexcept { return (x < y ? x = y, true : false); } template void dedup(std::vector& v) { std::sort(std::begin(v), std::end(v)), v.erase(std::unique(std::begin(v), std::end(v)), std::end(v)); } template ll bisect(ll ok, ll ng, const F& f) { while (abs(ok - ng) > 1) { ll mid = (ok + ng) / 2; (f(mid) ? ok : ng) = mid; } return ok; } template ld bisect_real(ld ok, ld ng, const F& f, int iter = 80) { while (iter--) { ld mid = (ok + ng) / 2.; (f(mid) ? ok : ng) = mid; } return ok; } inline void SCAN() {} template inline void SCAN(H& h, T&... t) { std::cin >> h, SCAN(t...); } #define INT(...) int __VA_ARGS__; SCAN(__VA_ARGS__) #define LL(...) long long __VA_ARGS__; SCAN(__VA_ARGS__) #define LD(...) long double __VA_ARGS__; SCAN(__VA_ARGS__) #define STR(...) std::string __VA_ARGS__; SCAN(__VA_ARGS__) #define CHAR(...) char __VA_ARGS__; SCAN(__VA_ARGS__) #define VEC(type, name, size) std::vector name(size); for (int i = 0; i < (int)size; i++) SCAN(name[i]); #define VV(type, name, h, w) std::vector> name(h, std::vector(w)); for (int i = 0; i < (int)h; i++) for (int j = 0; j < (int)w; j++) SCAN(name[i][j]); #define overload4(a, b, c, d, e, ...) e #define rep1(a) for (long long _i = 0; _i < (a); _i++) #define rep2(i, a) for (long long i = 0; i < (a); i++) #define rep3(i, a, b) for (long long i = (a); i < (b); i++) #define rep4(i, a, b, c) for (long long i = (a); i < (b); i += (c)) #define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__) #define rrep(i, a, b, c) for (long long i = (a); i > (b); i += (c)) #define all(x) std::begin(x), std::end(x) #define rall(x) std::rbegin(x), std::rend(x) #define len(x) (long long)(size(x)) #define pb push_back int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); INT(N,M); vector> G; ll sum = 0; rep(i, N) { INT(c,d); if(c==0) sum += d; else { G.pb({c,d}); } } N=G.size(); sort(rall(G)); vector dp(N+1,vector>(12,{1e18,-1})); dp[0][0]={0,0}; rep(i, N){ dp[i+1]=dp[i]; rep(j,11) if(dp[i][j].second!=-1) { ll cst=dp[i][j].first+(G[i].first<