Buggy python submission (verdict: Runtime Error):
import sys
from numba import jit

@jit
def main():
  input = sys.stdin.readline
  
  N, W = map(int, input().split())
  L = [list(map(int,input().split())) for i in range(N)]
  dp = [[0] * (W + 1) for i in range(N + 1)]
  
  for i in range(N):
    weight = L[i][0]
    value = L[i][1]
    for w in range(W + 1):
      if w >= weight:
        dp[i + 1][w] = max(dp[i][w],dp[i][w - weight] + value)
      else:
        dp[i + 1][w] = dp[i][w]
        
  print(dp[-1][W])

if __name__ == '__main__':
  main()

Fixed submission:
N, W = map(int, input().split())
L = sorted( [ [int(i) for i in input().split()] for _ in range(N) ] )

dp = [0] * (W + 1)
cnt = 0

for w, v in L:
    #重さを足し合わせていき合計を求める
    cnt = cnt + w
    #W=重さの制約とこれまでの重さの合計のうち、
    #小さい方から品物iの重さまで、逆順にfor文を回す
    ##3,8-5,...15-7
    for i in range(min(cnt, W), w - 1, -1):
        #同じ重さでより価値が高い組み合わせがあれば価値を更新する
        ## w < Wの制約があり、i - wとその値を参照してから更新しているため、
        ## Wの制約を満たさない値を持つことはない
        ### 方法上、持ち得ない重さに持ち得ない値がつくことがあるが、
        ### それらが解 = 最大値になることはない
        ### (解を求める過程でついでに足されたり足されなかったりするだけなので)
        if dp[i] < dp[i - w] + v:
            dp[i] = dp[i - w] + v

print(max(dp))

Buggy python submission (verdict: Time Limit Exceeded):
import sys

input = sys.stdin.readline

N, W = map(int, input().split())
L = [list(map(int,input().split())) for i in range(N)]
dp = [[0] * (W + 1) for i in range(N + 1)]

for i in range(N):
  weight = L[i][0]
  value = L[i][1]
  for w in range(W + 1):
    if w >= weight:
      dp[i + 1][w] = max(dp[i][w],dp[i][w - weight] + value)
    else:
      dp[i + 1][w] = dp[i][w]
      
print(dp[-1][W])

Fixed submission:
N, W = map(int, input().split())
L = sorted( [ [int(i) for i in input().split()] for _ in range(N) ] )

dp = [0] * (W + 1)
cnt = 0

for w, v in L:
    #重さを足し合わせていき合計を求める
    cnt = cnt + w
    #W=重さの制約とこれまでの重さの合計のうち、
    #小さい方から品物iの重さまで、逆順にfor文を回す
    ##3,8-5,...15-7
    for i in range(min(cnt, W), w - 1, -1):
        #同じ重さでより価値が高い組み合わせがあれば価値を更新する
        ## w < Wの制約があり、i - wとその値を参照してから更新しているため、
        ## Wの制約を満たさない値を持つことはない
        ### 方法上、持ち得ない重さに持ち得ない値がつくことがあるが、
        ### それらが解 = 最大値になることはない
        ### (解を求める過程でついでに足されたり足されなかったりするだけなので)
        if dp[i] < dp[i - w] + v:
            dp[i] = dp[i - w] + v

print(max(dp))

Buggy python submission (verdict: Time Limit Exceeded):
N, W = map(int, input().split())
L = [list(map(int,input().split())) for i in range(N)]
dp = [[0] * (W + 1) for i in range(N + 1)]

for i in range(N):
  weight = L[i][0]
  value = L[i][1]
  for w in range(W + 1):
    if w >= weight:
      dp[i + 1][w] = max(dp[i][w],dp[i][w - weight] + value)
    else:
      dp[i + 1][w] = dp[i][w]
      
print(dp[-1][W])

Fixed submission:
N, W = map(int, input().split())
L = sorted( [ [int(i) for i in input().split()] for _ in range(N) ] )

dp = [0] * (W + 1)
cnt = 0

for w, v in L:
    #重さを足し合わせていき合計を求める
    cnt = cnt + w
    #W=重さの制約とこれまでの重さの合計のうち、
    #小さい方から品物iの重さまで、逆順にfor文を回す
    ##3,8-5,...15-7
    for i in range(min(cnt, W), w - 1, -1):
        #同じ重さでより価値が高い組み合わせがあれば価値を更新する
        ## w < Wの制約があり、i - wとその値を参照してから更新しているため、
        ## Wの制約を満たさない値を持つことはない
        ### 方法上、持ち得ない重さに持ち得ない値がつくことがあるが、
        ### それらが解 = 最大値になることはない
        ### (解を求める過程でついでに足されたり足されなかったりするだけなので)
        if dp[i] < dp[i - w] + v:
            dp[i] = dp[i - w] + v

print(max(dp))

Buggy python submission (verdict: Time Limit Exceeded):
N, W = map(int, input().split())
L = [list(map(int,input().split())) for i in range(N)]

dp = [0] * (W + 1)
con = 0

for w, v in L:
  con += w
  for i in range(min(con, W), w - 1, -1):
    if dp[i] < dp[i - w] + v:
      dp[i] = dp[i - w] + v

print(max(dp))

Fixed submission:
N, W = map(int, input().split())
L = sorted( [ [int(i) for i in input().split()] for _ in range(N) ] )

dp = [0] * (W + 1)
cnt = 0

for w, v in L:
    #重さを足し合わせていき合計を求める
    cnt = cnt + w
    #W=重さの制約とこれまでの重さの合計のうち、
    #小さい方から品物iの重さまで、逆順にfor文を回す
    ##3,8-5,...15-7
    for i in range(min(cnt, W), w - 1, -1):
        #同じ重さでより価値が高い組み合わせがあれば価値を更新する
        ## w < Wの制約があり、i - wとその値を参照してから更新しているため、
        ## Wの制約を満たさない値を持つことはない
        ### 方法上、持ち得ない重さに持ち得ない値がつくことがあるが、
        ### それらが解 = 最大値になることはない
        ### (解を求める過程でついでに足されたり足されなかったりするだけなので)
        if dp[i] < dp[i - w] + v:
            dp[i] = dp[i - w] + v

print(max(dp))