#include <iostream>
#include <cstdio>
using namespace std;
inline int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=x*10+c-'0';
c=getchar();
}
return f*x;
}
const int N=1e4+5,M=50,mod=1e6;
int three[10],a[M][10],b[M],num,c[10],v[500];
int s,dp[N][M],ans,n,m,k;
bool ok[M][M];
int main()
{
n=read(); m=read(); k=read();
three[0]=1;
for(int i=1;i<=m;i++) three[i]=three[i-1]*3;
for(int i=0;i<three[m];i++)
{
int x=i,p=0;
while(x)
{
c[++p]=x%3;
x/=3;
}
bool flag=1;
for(int j=1;j<m;j++)
if(c[j]==c[j+1])
{
flag=0;
break;
}
if(!flag) continue;
b[++num]=i;
v[i]=num;
for(int j=1;j<=m;j++) a[num][j]=c[j];
}
for(int i=1;i<=num;i++)
for(int j=1;j<i;j++)
{
bool flag=1;
for(int k=1;k<=m;k++)
if(a[i][k]==a[j][k])
{
flag=0;
break;
}
if(flag) ok[i][j]=ok[j][i]=1;
}
for(int i=1;i<=m;i++)
{
c[i]=read();
s+=(c[i]-1)*three[i-1];
}
if(!v[s])
{
cout<<0;
return 0;
}
if(k==1) dp[1][v[s]]=1;
else for(int i=1;i<=num;i++) dp[1][i]=1;
for(int l=2;l<=n;l++)
if(l==k)
{
for(int j=1;j<=num;j++)
if(ok[j][v[s]])
dp[l][v[s]]=(dp[l][v[s]]+dp[l-1][j])%mod;
}
else
{
for(int i=1;i<=num;i++)
for(int j=1;j<=num;j++)
if(ok[i][j])
dp[l][i]=(dp[l][i]+dp[l-1][j])%mod;
}
for(int i=1;i<=num;i++)
ans=(ans+dp[n][i])%mod;
cout<<ans;
return 0;
}