#include<bits/stdc++.h>
using namespace std;
const int N=25005,P=1e9+7;
int n,k,m,a[N],f[N][405],g[N][405],lst[405],fac[405];
inline int pw(int a,int b){int r=1;for(;b;b>>=1,a=1ll*a*a%P)if(b&1)r=1ll*r*a%P;return r;} 
int main()
{
	scanf("%d%d%d",&n,&k,&m);
	int l=0,mx=0,ans=1ll*(n-m+1)*pw(k,n-m)%P;
	for(int i=1;i<=m;i++)scanf("%d",&a[i]),l=min(l+1,i-lst[a[i]]),lst[a[i]]=i,mx=max(mx,l);
	for(int i=fac[0]=1;i<=k;i++)fac[i]=1ll*fac[i-1]*i%P;
	if(mx==k){printf("%d\n",ans);return 0;}
	if(mx==m)
	{
		f[0][0]=1;
		for(int i=1;i<=n;i++)for(int j=k-1,s1=0,s2=0;j>=1;j--)
		{
			s1=(s1+f[i-1][j])%P;s2=(s2+g[i-1][j])%P;
			f[i][j]=(s1+1ll*f[i-1][j-1]*(k-j+1))%P;
			g[i][j]=(s2+1ll*g[i-1][j-1]*(k-j+1))%P;
			if(j>=m)g[i][j]=(g[i][j]+f[i][j])%P;
		}
		int res=0;for(int i=1;i<k;i++)res=(res+g[n][i])%P;
		res=1ll*res*fac[k-m]%P*pw(fac[k],P-2)%P;
		printf("%d\n",(ans+P-res)%P);
		return 0;
	}
	int u=0,v=0,res=0;
	memset(lst,0,sizeof(lst));
	for(int i=1;i<=m;i++)if(!lst[a[i]])u++,lst[a[i]]=1;else break;
	memset(lst,0,sizeof(lst));
	for(int i=m;i>=1;i--)if(!lst[a[i]])v++,lst[a[i]]=1;else break;
	f[0][u]=g[0][v]=1;
	for(int i=1;i<=n;i++)for(int j=k-1,s=0;j>=1;j--)
	{
		s=(s+f[i-1][j])%P;
		f[i][j]=(s+1ll*f[i-1][j-1]*(k-j+1))%P;
	}
	for(int i=1;i<=n;i++)for(int j=k-1,s=0;j>=1;j--)
	{
		s=(s+g[i-1][j])%P;
		g[i][j]=(s+1ll*g[i-1][j-1]*(k-j+1))%P;
	}
	for(int i=0;i<=n-m;i++)
	{
		int s=0,t=0;
		for(int j=1;j<k;j++)s=(s+f[i][j])%P,t=(t+g[n-m-i][j])%P;
		res=(res+1ll*s*t)%P;
	}
	printf("%d\n",(ans+P-res)%P);
	return 0;
}