import sys #sys.setrecursionlimit(n) import heapq import re import bisect import random import math import itertools from collections import defaultdict, deque from copy import deepcopy from decimal import * t = int(input()) n = int(input()) ct = list(map(int, input().split())) vt = list(map(int, input().split())) dp = [0] * 20001 c = [0] * 2000 v = [0] * 2000 for i in range(n): c[i] = ct[i] v[i] = vt[i] p = n for i in range(n): j = c[i] k = v[i] while(1): k = k // 2 if k == 0: break c[p] = j v[p] = k p += 1 for i in range(p): for j in reversed(range(t + 1 - c[i])): dp[j + c[i]] = max(dp[j + c[i]], dp[j] + v[i]) print(dp[t])