#include <iostream>
#include <vector>
#include <set>
#include <queue>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <fstream>
#include <sstream>
using namespace std;
typedef long long ll;

int T, N;
int c[20], v[20];

int dp[20][10010];
bool done[20][10010];

int solve(int k, int t){
    if(k >= N){
        return 0;
    }
    
    if(done[k][t]){
        return dp[k][t];
    }
    
    int V = v[k];
    int C = c[k];
    int add = 0;
    int rest = t;
    
    int res = solve(k + 1, t);
    for(;V > 0 && rest >= C;){
        rest -= C;
        add += V;
        
        res = max(res, solve(k + 1, rest) + add);
        
        V /= 2;
    }
    
    done[k][t] = true;
    return dp[k][t] = res;
}

int main(){
    cin >> T >> N;
    for(int i=0;i<N;i++)cin >> c[i];
    for(int i=0;i<N;i++)cin >> v[i];
    
    cout << solve(0, T) << endl;
    return 0;
}