def main(): import sys input = sys.stdin.read().split() idx = 0 T = int(input[idx]); idx +=1 N = int(input[idx]); idx +=1 c = list(map(int, input[idx:idx+N])) idx +=N v = list(map(int, input[idx:idx+N])) idx +=N groups = [] for i in range(N): ci = c[i] vi = v[i] options = [] current_v = vi sum_val = 0 k = 0 while True: k +=1 time = ci * k if time > T: break sum_val += current_v options.append((time, sum_val)) if current_v ==0: break current_v = current_v //2 if sum_val == sum_val - current_v: # no change in next step, break break groups.append(options) dp = [-float('inf')] * (T +1) dp[0] = 0 for group in groups: temp_dp = dp.copy() for time, val in group: for t in range(T, time-1, -1): if dp[t - time] + val > temp_dp[t]: temp_dp[t] = dp[t - time] + val dp = temp_dp print(max(dp)) if __name__ == '__main__': main()