Pagini recente » Cod sursa (job #703619) | Cod sursa (job #1179477) | Cod sursa (job #2442566) | Cod sursa (job #2730619) | Cod sursa (job #1840456)
#include <bits/stdc++.h>
using namespace std;
const int M = 1005, K = 22, Mod = 9901;
int n, m, k, d[M], a[K][K], ans[M], b[K][K], res[K], c[K][K], i;
void initialize()
{
int i,j;
for(i=1; i<=k; ++i)
for(j=1; j<=k; ++j)
{
if(j==k) b[i][j] = (i==1 || i==k);
else b[i][j] = (i==j+1);
a[i][j] = (i==j);
res[i] = 0;
}
}
void inm(int a[K][K], int b[K][K])
{
int i, j, z;
for(i=1; i<=k; ++i)
for(j=1; j<=k; ++j)
{
c[i][j] = 0;
for(z=1; z<=k; ++z)
c[i][j] += a[i][z] * b[z][j];
}
for(i=1; i<=k; ++i)
for(j=1; j<=k; ++j)
a[i][j] = c[i][j] % Mod;
}
void pow(int n)
{
while(n)
{
if(n&1) inm(a, b);
inm(b,b);
n >>= 1;
}
int i,j;
for(i=1; i<=k; ++i)
for(j=1; j<=k; ++j)
res[i] += ans[j] * a[j][i];
for(i=1; i<=k; ++i) ans[i] = res[i] % Mod;
}
int main()
{
freopen("pod.in", "r", stdin);
freopen("pod.out", "w", stdout);
scanf("%d%d%d", &n, &m, &k);
for(i=1; i<=m; ++i) scanf("%d", &d[i]);
d[++m] = n;
sort(d+1, d+m+1);
ans[k]=1;
for(i=1; i<=m; ++i)
{
initialize();
pow(d[i]-d[i-1]);
if(i<m) ans[k] = 0;
}
printf("%d\n", ans[k]);
return 0;
}