/*
TASK:skok
LANG:C++
*/
#include<cstdio>
#include<memory>
#define MAXN 200001
#define MAXM 200
#define MAX 200001
using namespace std;

typedef struct res{
   int s,fp;       
};

int N,M,A[MAXN],steps[MAXM],sp=0;
res sums[MAX];

void f(int i,int tmp_sum){
     for(int j=0;j<M;j++){
      if(i+steps[j]<=N){
       if(A[i+steps[j]]!=0)
         sums[sp].fp=i+steps[j];
       else
         sums[sp].fp=i;
       f(i+steps[j],sums[sp].s=tmp_sum+A[i+steps[j]]);
       if(sums[sp].s!=0) sp++;
      }
     }
}

int main(){
    int i;
    res max_sum;
    max_sum.s=0;
    max_sum.fp=0;
    scanf("%d%d\n",&N,&M);
    memset(A,0,(N+1)*sizeof(int));
    memset(steps,0,M*sizeof(int));
    for(i=0;i<M;i++) scanf("%d",&steps[i]);
    for(i=0;i<=N;i++) scanf("%d",&A[i]);
    f(0,A[0]);
    for(i=0;i<sp;i++)
      if((sums[i].s>max_sum.s)||(sums[i].s==max_sum.s&&sums[i].fp<max_sum.fp)){
        max_sum.s=sums[i].s;
        max_sum.fp=sums[i].fp;
      }
    printf("%d %d",max_sum.s,max_sum.fp);
    return 0;
}
