/*
TASK:skok
LANG:C++
*/
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <functional>
#include <iterator>
#include <math.h>
#include <stdlib.h>
#include <sstream>
using namespace std;

#define MAXN 200001
#define MAXM 201


int N,M;
int a[MAXN],m[MAXM],d[MAXN][2];
int i,j,Max;



inline void Read()
{
     cin>>N>>M;
     
     for(i=0;i<M;i++)
        cin>>m[i];
     
     for(i=0;i<=N;i++)
        cin>>a[i];
}

inline void Solve()
{
     for(i=N;i>=0;i--)
     {
         Max=a[i];
         d[i][0]=0;
         d[i][1]=i;
         
         for(j=0;j<M;j++)
         {
            if(i+m[j]<=N) 
               if( Max < max( Max, a[i]+d[ i+m[j] ][0] ) )
               {
                   Max = max( Max, a[i]+d[ i+m[j] ][0] );
                   d[i][1]=d[ i+m[j] ][1];
               }
         }
         
         d[i][0]=Max;
     }
     
     cout<<d[0][0]<<" "<<d[0][1]<<"\n";
}

int main()
{
    Read();
    
    Solve();
    
    return 0;
}

