input: Write a function to implement the dynamic programming solution for the 0-1 knapsack problem. The function should take in the capacity of the knapsack, a list of item values, and a list of item weights, and return the maximum value that can be achieved without exceeding the knapsack's capacity. If the lists of values and weights are empty, the function should return 0.
  
  def knapSack(W, wt, val, n):
      dp = [[0 for _ in range(W + 1)] for _ in range(n + 1)]
      for i in range(n + 1):
          for w in range(W + 1):
              if i == 0 or w == 0:
                  dp[i][w] = 0
              elif wt[i - 1] <= w:
                  dp[i][w] = max(val[i - 1] + dp[i - 1][w - wt[i - 1]], dp[i - 1][w])
              else:
                  dp[i][w] = dp[i - 1][w]
      return dp[n][W]
  
  assert knapSack(50, [10, 20, 30], [60, 100, 120], 3) == 220
  assert knapSack(50, [], [], 0) == 0
  assert knapSack(3, [4, 5, 1], [1, 2, 3], 3) == 0
  assert knapSack(7, [1, 3, 4], [1, 6, 10], 3) == 16
output: def knapSack(W, wt, val, n):
      dp = [[0 for _ in range(W + 1)] for _ in range(n + 1)]
      for i in range(n + 1):
          for w in range(W + 1):
              if i == 0 or w == 0:
                  dp[i][w] = 0
              elif wt[i - 1] <= w:
                  dp[i][w] = max(val[i - 1] + dp[i - 1][w - wt[i - 1]], dp[i - 1][w])
              else:
                  dp[i][w] = dp[i - 1][w]
      return dp[n][W]