#include<bits/stdc++.h>
using namespace std;
int dp[2][maxn]
int main()
{
for(int i = 1; i <= n; i++)
{
for(int j = 0; j <= w; j++)
{
if(j < w[i])
{
dp[(i + 1) & 1][j] = dp[i & 1][j];
}
else
{
dp[(i + 1) & 1][j] = max(dp[i &1][j], dp[(i + 1) & 1][j - w[i]] + v[i]);
}
}
}
cout <<dp[n & 1][w] << endl;
return 0;
}