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 = 10**18 N, D, K = readints() A = readints() C = readints() # dp[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)] # pass for d in range(D+1): for k in range(K+1): dpnew[d][k] = dp[d][k] # take for d in range(D): for k in range(K+1): if dp[d][k] == -INF: continue k2 = min(K, k+C[i]) dpnew[d+1][k2] = max(dpnew[d+1][k2], dp[d][k] + A[i]) dp = dpnew ans = dp[-1][-1] if ans == -INF: print('No') else: print(ans) if __name__ == '__main__': # deep_recursion() main()