#include using namespace std; using ll = long long; using ld = long double; #define rep(i, a, b) for(ll i = (ll)a; i < (ll)b; i++) #define irep(i, v) for(auto i = (v).begin(); i != (v).end(); i++) #define ALL(v) (v).begin(), (v).end() #define SZ(v) (ll)(v).size() const ll INF = 3e18; const ld EPS = 1e-10; const ll MOD = 1e9 + 7; const ld PI = M_PI; int main(){ cin.tie(0); ios::sync_with_stdio(false); srand((unsigned)time(NULL)); cout << fixed << setprecision(20); ll n, vmax, c; cin >> n >> vmax >> c; vector v(2 * n), w(2 * n); rep(i, 0, n){ cin >> v[2 * i + 1] >> w[2 * i + 1]; v[2 * i] = v[2 * i + 1]; w[2 * i] = w[2 * i + 1] + c; } vector> dp(2 * n + 1, vector(vmax + 1, 0)); rep(i, 0, 2 * n){ rep(j, 1, vmax + 1){ if(i % 2 == 1){ if(j - v[i] >= 0) dp[i + 1][j] = max({dp[i][j], dp[i + 1][j - v[i]] + w[i], dp[i + 1][j - 1]}); else dp[i + 1][j] = max(dp[i][j], dp[i + 1][j - 1]); } else{ if(j - v[i] >= 0) dp[i + 1][j] = max({dp[i][j], dp[i][j - v[i]] + w[i], dp[i + 1][j - 1]}); else dp[i + 1][j] = max(dp[i + 1][j], dp[i][j]); } } } cout << *max_element(ALL(dp[2 * n])) << endl; return 0; }