#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=0;
bool f=0;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<0)
{
putchar('-'); x=-x;
}
if(x<10)
{
putchar(x+'0'); return;
}
write(x/10);
putchar((x%10)+'0');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=100005,M=25;
int n,m,Mod;
int Num[25],f[25][25];
int ans[25][25],power[25][25],a[25][25],c[25][25];
inline void Ad(int &x,int y)
{
x+=y;
x-=(x>=Mod)?Mod:0;
return;
}
int Next[25];
inline void Pre_f()
{
int i,j=0;
Next[1]=0;
for(i=2;i<=m;i++)
{
while((Num[j+1]!=Num[i])&&j) j=Next[j];
if(Num[j+1]==Num[i]) j++;
Next[i]=j;
}
for(i=0;i<m;i++)
{
for(j=0;j<=9;j++)
{
int Now=i;
while((Num[Now+1]!=j)&&Now) Now=Next[Now];
if(Num[Now+1]==j) Now++;
f[i][Now]++;
}
}
/*
for(i=0;i<m;i++,puts(""))
{
for(j=0;j<m;j++) W(f[i][j]);
}
puts("");
*/
return;
}
int main()
{
int i,j,k,Sum=0;
R(n); R(m); R(Mod);
for(i=1;i<=m;i++)
{
char ch=' ';
while(!isdigit(ch)) ch=getchar();
Num[i]=ch-'0';
}
Pre_f();
ans[0][0]=1;
for(i=0;i<=m-1;i++) power[i][i]=1;
memmove(a,f,sizeof a);
while(n)
{
if(n&1)
{
memset(c,0,sizeof c);
for(i=0;i<=m-1;i++) for(j=0;j<=m-1;j++) for(k=0;k<=m-1;k++)
{
Ad(c[i][j],power[i][k]*a[k][j]%Mod);
}
memmove(power,c,sizeof power);
}
memset(c,0,sizeof c);
for(i=0;i<=m-1;i++) for(j=0;j<=m-1;j++) for(k=0;k<=m-1;k++)
{
Ad(c[i][j],a[i][k]*a[k][j]%Mod);
}
memmove(a,c,sizeof a);
n>>=1;
}
memset(c,0,sizeof c);
for(i=0;i<=0;i++) for(j=0;j<=m-1;j++) for(k=0;k<=m-1;k++)
{
Ad(c[i][j],ans[i][k]*power[k][j]%Mod);
}
memmove(ans,c,sizeof ans);
for(i=0;i<m;i++) Ad(Sum,ans[0][i]);
Wl(Sum);
return 0;
}