N, X, Y = map(int, input().split()) A = [tuple(map(int, input().split())) for _ in range(N)] # dp[i][j][j]: i番目の機能までの実装/非実装が確定しており、メニュー枠をi、容量をj消費している時にあげられる可愛さの最大値。 # 初期化: dp[i][j][k] = 0 # 答え: max[0<=x<=X, 0<=y<=Y]{dp[N][x][y]} dp = [[[0] * (Y + 1) for _ in range(X+1)] for _ in range(N+1)] for i in range(N): a, b, c = A[i] for x in range(X+1): for y in range(Y+1): dp[i+1][x][y] = max(dp[i+1][x][y], dp[i][x][y]) if x + a <= X and y + b <= Y: dp[i+1][x+a][y+b] = max(dp[i][x+a][y+b], dp[i][x][y] + c) # import pprint; pprint.pprint(dp) ans = 0 for x in range(X+1): for y in range(Y+1): ans = max(ans, dp[N][x][y]) print(ans)