#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node
{
long long a, b, c;
} f[55];
bool cmp(node x, node y)
{
return 1ll * x.b * y.c > 1ll * y.b * y.c;
}
long long n, m, dp[100005];
int main()
{
cin >> m >> n;
for (long long i = 1; i <= n; i++)
{
cin >> f[i].a;
}
for (long long i = 1; i <= n; i++)
{
cin >> f[i].b;
}
for (long long i = 1; i <= n; i++)
{
cin >> f[i].c;
}
sort(f + 1, f + n + 1, cmp);
for (long long i = 1; i <= n; i++)
{
for (long long j = m; j >= f[i].c; j--)
{
dp[j] = max(dp[j], dp[j - f[i].c] + f[i].a - j * f[i].b);
}
}
long long ans = 0;
for (long long j = 1; j <= m; j++)
{
ans = max(ans, dp[j]);
}
cout << ans;
return 0;
}