def readints(): return list(map(int, input().split())) def deep_recursion(): import sys import pypyjit # type: ignore sys.setrecursionlimit(550000) pypyjit.set_param('max_unroll_recursion=-1') def main(): INF = float('inf') N, D, K = readints() A = readints() C = readints() # dp[i][d][k] = max sum(A) of d problems with k beautifulness dp = [[-INF] * (K+1) for _ in range(D+1)] dp[0][0] = 0 for i in range(N): dpnew = [[-INF] * (K+1) for _ in range(D+1)] for k in range(K+1): for d in range(D+1): if d == D: dpnew[d][k] = max(dpnew[d][k], dp[d][k]) else: dpnew[d+1][min(K, k+C[i])] = max(dpnew[d+1][min(K, k+C[i])], dp[d+1][min(K, k+C[i])], dp[d][k] + A[i]) dp = dpnew ans = dp[-1][-1] if ans < 0: print('No') else: print(ans) if __name__ == '__main__': # deep_recursion() main()