/*
TASK:skok
LANG: C++
*/
#include <iostream>

using namespace std;

#define _MAX_N 201000
#define _MAX_M 200

int N;
int M;
int n[_MAX_N];
int m[_MAX_M];
int f[_MAX_N];

void init()
{
	cin >> N;
	cin >> M;
	for (int i = 0; i < M; i++) cin >> m[i];
	for (int i = 0; i <= N; i++) cin >> n[i];
}

void solve()
{
	int jump = 0; int max = 0; int best = 0;
	for (int i = 0; i < N; i++)
		f[i] = n[i];
	for (int i = 0; i < M; i++)
	{
		jump = m[i];
		while (jump < N)
		{
			if (f[jump] < f[jump - m[i]] + n[jump])
				f[jump] = f[jump - m[i]] + n[jump];
			if (f[jump] > max)
			{
				max = f[jump];
				best = jump;
			}
			jump += m[i];
		}
	}
	cout << max << ' ' << best << endl;
}

int main()
{
	init();
	solve();
	
	cin.get();
	cin.get();
	return 0;
}
