output_description: Print the maximum total values of the items in a line.
input_description: N W
      v1 w1
      v2 w2
      :
      vN wN
      
  
  The first line consists of the integers N and W. In the following lines, the
  value and weight of the i-th item are given.
attempt: ii = lambda: int(input())
  mi = lambda: map(int, input().split())
  li = lambda: list(map(int, input().split()))
  
  n, W = mi()
  vl = [-1] * (W + 1)
  w_list = []
  for i in range(n):
      vt, wt = mi()
      if wt > W:
          continue
      vl[wt] = max(vl[wt], vt)
  for k, i in enumerate(vl):
      if i != -1:
          w_list.append(k)
  dp = [0] * (W + 1)
  for i in w_list:
      w = i
      v = vl[w]
      for i in range(w, W + 1):
          dp[i] = max(dp[i], dp[i - w] + v)
  print(dp[W])
  
problem_description: Knapsack Problem
  
    
  
  You have N kinds of items that you want to put them into a knapsack. Item i
  has value vi and weight wi.
  
  You want to find a subset of items to put such that:
  
    * The total value of the items is as large as possible.
    * The items have combined weight at most W, that is capacity of the knapsack.
    * You can select as many items as possible into a knapsack for each kind.
  
  Find the maximum total value of items in the knapsack.
samples: [{"input": "4 8\n    4 2\n    5 2\n    2 1\n    8 3", "output": "21"}, {"input": "2 20\n    5 9\n    4 10", "output": "10"}, {"input": "3 9\n    2 1\n    3 1\n    5 2", "output": "27"}]