#include<bits/stdc++.h>
using namespace std;
const int N=25010;
const int mod=1e9+7;

int gi() {
	int x=0,o=1;char ch=getchar();
	while(!isdigit(ch)&&ch!='-') ch=getchar();
	if(ch=='-') o=-1,ch=getchar();
	while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
	return x*o;
}

int qpow(int a,int b) {
	int ret=1;
	while(b) {
		if(b&1) ret=1ll*ret*a%mod;
		a=1ll*a*a%mod,b>>=1;
	}
	return ret;
}

void inc(int &a,int b) {
	a=a+b>=mod?a+b-mod:a+b;
}

int n,k,m,mx,a[N],f[N][410],g[N][410];
bool vis[410],fl;

int main() {
	cin>>n>>k>>m;
	for(int i=1;i<=m;i++) {
		a[i]=gi();
		if(vis[a[i]]) fl=1;
		else vis[a[i]]=1;
	}
	int ans=1ll*(n-m+1)*qpow(k,n-m)%mod;
	for(int i=1;i+k-1<=m;i++) {
		memset(vis,0,sizeof(vis));
		bool fl2=1;
		for(int j=0;j<k;j++) {
			if(vis[a[i+j]]) { fl2=0;break; }
			vis[a[i+j]]=1;
		}
		if(fl2) return cout<<ans,0;
	}
	if(fl) {
		int fr=0,bk=0;
		memset(vis,0,sizeof(vis));
		for(int i=1;i<=m;i++) {
			if(!vis[a[i]]) ++fr,vis[a[i]]=1;
			else break;
		}
		memset(vis,0,sizeof(vis));
		for(int i=m;i;i--) {
			if(!vis[a[i]]) ++bk,vis[a[i]]=1;
			else break;
		}
		f[0][fr]=1,g[0][bk]=1;
		for(int i=1;i<=n;i++) {
			int s1=0,s2=0;
			for(int j=k-1;j;j--) {
				inc(s1,f[i-1][j]),inc(s2,g[i-1][j]);
				f[i][j]=(f[i][j]+1ll*f[i-1][j-1]*(k-j+1)+s1)%mod;
				g[i][j]=(g[i][j]+1ll*g[i-1][j-1]*(k-j+1)+s2)%mod;
			}
		}
		for(int i=0;i<=n-m;i++) {
			int s1=0,s2=0;
			for(int j=1;j<k;j++) inc(s1,f[i][j]),inc(s2,g[n-m-i][j]);
			inc(ans,mod-1ll*s1*s2%mod);
		}
	}
	else {
		f[0][0]=1;
		for(int i=1;i<=n;i++) {
			int s1=0,s2=0;
			for(int j=k-1;j;j--) {
				inc(s1,f[i-1][j]),inc(s2,g[i-1][j]);
				f[i][j]=(f[i][j]+1ll*f[i-1][j-1]*(k-j+1)+s1)%mod;
				g[i][j]=(g[i][j]+1ll*g[i-1][j-1]*(k-j+1)+s2)%mod;
				if(j>=m) inc(g[i][j],f[i][j]);
			}
		}
		int s=0;
		for(int i=1;i<k;i++) inc(s,g[n][i]);
		for(int i=k-m+1;i<=k;i++) s=1ll*s*qpow(i,mod-2)%mod;
		inc(ans,mod-s);
	}
	cout<<ans;
	return 0;
}
