1 #include <bits/stdc++.h>
2 #define maxn 13003
3 #define _for(i,a,b) for(int i = (a);i < b;i ++)
4 typedef long long ll;
5 using namespace std;
6 inline ll read()
7 {
8 ll ans = 0;
9 char ch = getchar(), last = ' ';
10 while(!isdigit(ch)) last = ch, ch = getchar();
11 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
12 if(last == '-') ans = -ans;
13 return ans;
14 }
15 inline void write(ll x)
16 {
17 if(x < 0) x = -x, putchar('-');
18 if(x >= 10) write(x / 10);
19 putchar(x % 10 + '0');
20 }
21
22 ll T,n;
23 struct P
24 {
25 ll a;
26 ll b;
27 ll c;
28 };
29 P p[52];
30
31 bool cmp(P t1,P t2)
32 {
33 return t1.c*t2.b < t2.c*t1.b;
34 }
35 ll dp[500003];
36 int main()
37 {
38 T = read(),n = read();
39 _for(i,1,n+1)
40 p[i].a = read();
41 _for(i,1,n+1)
42 p[i].b = read();
43 _for(i,1,n+1)
44 p[i].c = read();
45
46 sort(p+1,p+n+1,cmp);
47 memset(dp,0,sizeof(dp));
48 _for(i,1,n+1)
49 for(int t = T;t >= 0;t --)
50 if(t>=p[i].c)
51 dp[t] = max(dp[t],dp[t-p[i].c] + p[i].a - t * p[i].b);
52
53 ll maxx = 0;
54 _for(i,0,T+1)
55 maxx = max(maxx,dp[i]);
56 write(maxx);
57 return 0;
58 }