N=1000 W=1000 fi=10**6 print(N,W) dp=[0]+[fi]*W ans=[(fi,1)] for w in range(2,W+1): ans.append((dp[w]+1,w)) v=dp[w]+1 ndp=[0]*(W+1) for i in range(W+1): ndp[i]=max(ndp[i],dp[i]) if i+w<=W: ndp[i+w]=max(ndp[i+w],dp[i]+v) dp=ndp for v,w in ans: print(v,w)