N, V, C = map(int, input().split()) VW = [tuple(map(int, input().split())) for _ in range(N)] dp = [[-1] * (V + 1) for _ in range(N + 1)] dp[0][0] = 0 def chmax(DP,i,v): if DP[i] < v: DP[i] = v def chmin(DP,i,v): if DP[i] > v: DP[i] = v # もらうDP for i in range(1, N + 1): # dp表の行番号 v, w = VW[i - 1] for j in range(V + 1): candi = -1 # 上から ... dp[i - 1][j] x = dp[i - 1][j] if x != -1: candi = dp[i - 1][j] # 斜め上から ... dp[i - 1][j - v] if j - v >= 0: y = dp[i - 1][j - v] if y != -1: # 種類数が増える candi = max(candi, y + C + w) # 左から ... dp[i][j - v] z = dp[i][j - v] if z != -1: candi = max(candi, z + w) if candi != -1: dp[i][j] = candi ans = max(dp[-1]) print(ans)