input: Write a function called `knapSack` that solves the 0-1 knapsack problem using dynamic programming. The function should take in the capacity of the knapsack `W`, a list of weights `wt`, a list of corresponding values `val`, and the number of items `n`. The function should return the maximum value that can be obtained by choosing items such that their total weight does not exceed the knapsack's capacity. If the number of items or the capacity is zero, the function should return 0.
  
  assert knapSack(50, [10, 20, 30], [60, 100, 120], 3) == 220
  assert knapSack(10, [2, 2, 6, 5, 4], [6, 3, 5, 4, 6], 5) == 15
  assert knapSack(0, [10, 20, 30], [60, 100, 120], 3) == 0
  assert knapSack(50, [10, 20, 30], [60, 100, 120], 0) == 0
output: 
  def knapSack(W, wt, val, n):
      if n == 0 or W == 0:
          return 0
      dp = [[0 for _ in range(W + 1)] for _ in range(n + 1)]
      for i in range(1, n + 1):
          for w in range(1, W + 1):
              if 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]
  