//背包问题
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<cstring>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<vector>
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
const int maxn=1e3+5;
using namespace std;
//M[i][w] 把前i个物品装到容量为w的背包中的最大总重量。 递推方程就是链接关系,看当前的物品取or不取
int main()
{
//0 1背包
int i=0,n=0, W=0,w=0;
int M[maxn][maxn]={0},v[maxn]={0},val[maxn]={0};
for(w=0;w<=W;w++) M[0][W]=0;
for(i=1;i<=n;i++){
for(w=1; w<=W;w++){
if(v[i]>w) M[i][w] = M[i-1][w];
else M[i][w] = max(M[i-1][w],val[i]+M[i-1][w-v[i]]);
}
}
cout<<M[n][W]<<endl;
//完全背包
for(w=0;w<W;w++) M[0][W]=0;
for(i=1;i<=n;i++){
for(w=1;w<=W;w++){
if(v[i]>w) M[i][w]=M[i-1][w];
else M[i][w] =max(M[i-1][w], val[i]+M[i][w-v[i]]);
}
}
cout<<M[n][W]<<endl;
return 0;
}