#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=25005,K=405;
const int ms=1e9+7;
int a[N],f[N][K],g[N][K],las[K],n,m,k;
void add(int &x,int y){
	x+=y; if (x>=ms) x-=ms;
}
ll ksm(ll x,int k){
	ll t=1;
	for (;k;k>>=1){
		if (k&1) t=(t*x)%ms;
		x=(x*x)%ms;
	}
	return t;
}
ll fac(int x){
	ll ans=1;
	for (int i=2;i<=x;i++) ans=(ans*i)%ms;
	return ans;
}
int main(){
	scanf("%d%d%d",&n,&k,&m);
	for (int i=1;i<=m;i++) scanf("%d",&a[i]);
	int mx=0,now=0; ll ans=(ll)(n-m+1)*ksm(k,n-m)%ms;
	for (int i=1;i<=m;i++){
		now=min(now+1,i-las[a[i]]);
		las[a[i]]=i; mx=max(mx,now);
	}
	if (mx==k){printf("%lld\n",ans); return 0;}
	if (mx==m){
		f[0][0]=1;
		for (int i=1;i<=n;i++){
			int s=0,t=0;
			for (int j=k-1;j>=1;j--){
				add(s,f[i-1][j]); add(t,g[i-1][j]);
				(f[i][j]+=(ll)f[i-1][j-1]*(k-j+1)%ms)%=ms;
				(g[i][j]+=(ll)g[i-1][j-1]*(k-j+1)%ms)%=ms;
				add(f[i][j],s); add(g[i][j],t);
				if (j>=m) add(g[i][j],f[i][j]);
			}
		}
		int tmp=0;
		for (int i=1;i<=k;i++) add(tmp,g[n][i]);
		tmp=(ll)tmp*fac(k-m)%ms*ksm(fac(k),ms-2)%ms;
		ans=(ans+ms-tmp)%ms;
		printf("%lld\n",ans);
		return 0;
	}else{
		int u=0,v=0;
		memset(las,0,sizeof(las));
		for (int i=1;i<=m;i++){
			if (las[a[i]]) break;
			u++; las[a[i]]=1;
		}
		memset(las,0,sizeof(las));
		for (int i=m;i>=1;i--){
			if (las[a[i]]) break;
			v++; las[a[i]]=1;
		}
		f[0][u]=g[0][v]=1;
		for (int i=1;i<=n;i++){
			int s=0,t=0;
			for (int j=k-1;j>=1;j--){
				add(s,f[i-1][j]); add(t,g[i-1][j]); 
				(f[i][j]+=(ll)f[i-1][j-1]*(k-j+1)%ms)%=ms;
				(g[i][j]+=(ll)g[i-1][j-1]*(k-j+1)%ms)%=ms;
				add(f[i][j],s); add(g[i][j],t);
			}
		}
		for (int i=0;i+m<=n;i++){
			int s=0,t=0;
			for (int j=1;j<k;j++){
				add(s,f[i][j]); add(t,g[n-m-i][j]);
			}
			ans=(ans+ms-(ll)s*t%ms)%ms;
		}
		printf("%lld\n",ans);
	}
	return 0;
}