#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<queue>
#include<math.h>
#include<vector>
#include<iostream>
using namespace std;
typedef long long ll;
int b[11];
int kk,n,mod;
struct node
{
int a[11][11];
node()
{
memset(a,0,sizeof(a));
}
}A,B;
node operator *(node a,node b)
{
node ans;
for(int i=1;i<=10;i++)
for(int j=1;j<=10;j++)
for(int k=1;k<=10;k++)
ans.a[i][j]=((ans.a[i][j]+a.a[i][k]*b.a[k][j])%mod+mod)%mod;
return ans;
}
int aa(int n)
{
node ans=A,k=B;
while(n)
{
if(n&1)
ans=ans*k;
k=k*k;
n=n/2;
}
return (ans.a[1][1]%mod+mod)%mod;
}
int main()
{
while(~scanf("%d%d",&kk,&mod))
{
for(int i=1;i<=10;i++)
scanf("%d",&b[i]);
for(int i=1;i<=10;i++)
A.a[1][i]=10-i;
for(int i=1;i<=10;i++)
{
if(i==1)
{
for(int j=1;j<=10;j++)
B.a[j][i]=b[j];
}
else
B.a[i-1][i]=1;
}
if(kk<10)
cout<<(kk%mod+mod)%mod<<endl;
else
cout<<aa(kk-9)<<endl;
}
}