#include <bits/stdc++.h>
using namespace std;
ifstream in("pod.in");
ofstream out("pod.out");
const int mod = 9901,MAX=1001;
int n,m,k,v[MAX];
struct matrix
{
int v[21][21];
matrix(int x = 0)
{
memset(v, 0, sizeof(v));
for(int i=1; i<=k; ++i)
v[i][i]=x;
}
matrix operator*(matrix &x)
{
matrix res;
for (int i=1;i<=k;++i)
for (int j=1;j<=k;++j)
{
for (int l=1;l<=k;++l)
res.v[i][j]+=v[i][l]*x.v[l][j];
res.v[i][j]%=mod;
}
return res;
}
matrix operator^(int p)
{
matrix res(1),aux=(*this);
while(p)
{
if(p&1)res=res*aux;
p>>=1;
aux=aux*aux;
}
return res;
}
} a, b;
int main()
{
in>>n>>m>>k;
for (int i=1;i<=m;++i)
in>>v[i];
sort(v+1,v+m+1);
v[m+1]=n+1;
for(int i=1; i<k; ++i)
a.v[i][i+1]=b.v[i][i+1]=1;
a.v[k][1]=a.v[k][k]=1;
matrix res(1);
for (int i=1;i<=m+1;++i)
{
res=(a^(v[i]-1-v[i-1]))*res;
res=b*res;
}
out << res.v[k - 1][k];
return 0;
}