#include #include using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using vi = vector; using vvi = vector; using vvvi = vector; using vl = vector; using vvl = vector; using vll = vector; using vvll = vector; using vb = vector; using vvb = vector; using pii = pair; using pll = pair; using vpii = vector; using vpll = vector; using vstr = vector; constexpr ll INF_LL=1LL<<62; constexpr int INF_I=1LL<<30; #define rep(i,n) for(int i=0; i<((int)(n)); i++) #define reps(i,n) for(int i=1; i<=((int)(n)); i++) #define vector_cin(x) for(auto &n : (x)) cin >> n #define ALL(x) (x).begin(), (x).end() #define YesNo(x) ((x) ? "Yes": "No") #define pb emplace_back #define to_lower(S) transform(ALL((S)), (S).begin(), ::tolower) #define to_upper(S) transform(ALL((S)), (S).begin(), ::toupper) template bool chmax(T &a, const T& b) {if (a < b){a = b;return true;}return false;} template bool chmin(T &a, const T& b) {if (a > b){a = b;return true;}return false;} ll ceilint(ll x, ll y) {return (x + y - 1) / y;} void Main(); int main() {std::cin.tie(nullptr);std::ios_base::sync_with_stdio(false);std::cout << std::fixed << std::setprecision(15);Main();return 0;} //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- void Main() { ll N, I; cin >> N >> I; vll S(N), A(N); rep(i, N) cin >> S[i] >> A[i]; vvll dp(N + 2, vll(I + 2, 0)); rep(i, N) { rep(j, I + 1) { if (j >= S[i]) dp[i + 1][j] = max(dp[i][j - S[i]] + A[i], dp[i][j]); else dp[i + 1][j] = dp[i][j]; } } cout << dp[N][I] << endl; }