/*
TASK: skok
LANG: C
*/
#include <stdio.h>
#include <stdlib.h>
#define maxN 200005
#define maxM 205

int lane[maxN], skok[maxM];
int best[maxN];
int m,n;

int MAX(int a, int b)
{
    if (a > b) return a;
    else return b; 
}

void input()
{
     int i;
     scanf("%d%d",&n,&m);++n;
     for (i=0;i<m;++i) scanf("%d",&skok[i]);
     for (i=0;i<n;++i) scanf("%d",&lane[i]);
}

void solve()
{
     int i,j;
     int maxx = -1,pos;
     memset(best,-1,maxN*sizeof(int));
     best[0] = lane[0];
     for (i=0;i<n;++i) if (best[i] >= 0) 
         for (j=0;j<m;++j) if (i+skok[j] < n)
             best[i+skok[j]] = MAX(best[i+skok[j]], best[i] + lane[i+skok[j]]);
     for (i=0;i<n;++i)
         if (best[i] > maxx) {
            maxx = best[i];
            pos = i;
            }
     printf("%d %d\n",maxx,pos);
}

int main()
{
    input();
    solve();
    return 0;
}
