#include <stdio.h>
#include <string.h>
#define NL 10
#define FOR(i,k,n) for(i=k;i<n;i++)
int md;
struct Matrix {
int v[NL][NL];
Matrix() {
memset(v, 0, sizeof(v));
}
void Multiply(Matrix m) {
int i, j, k;
Matrix m1;
FOR(i,0,NL) {
FOR(j,0,NL) {
FOR(k,0,NL) {
m1.v[i][j] += v[i][k]*m.v[k][j];
if (m1.v[i][j]>=md) m1.v[i][j] %= md;
}
}
}
FOR(i,0,NL) {
FOR(j,0,NL) {
v[i][j] = m1.v[i][j];
}
}
}
};
int main() {
int k;
while (scanf("%d%d", &k, &md) != EOF) {
Matrix m0, m1;
int i, j;
FOR(i,0,NL) {
// printf("ok!");
scanf("%d", &m0.v[0][i]);
}
if (k<10) {
printf("%d\n", k);
continue;
}
FOR(i,1,NL) {
m0.v[i][i-1] = 1;
}
k -= 10;
m1 = m0;
while (k>0) {
if (k&1) m0.Multiply(m1);
m1.Multiply(m1);
k >>= 1;
}
int ans = 0;
FOR(i,0,NL) {
ans += m0.v[0][i]*(NL-i-1);
if (ans>=md) ans %= md;
}
printf("%d\n", ans);
}
}