#include <bits/stdc++.h>
#define syosu(x) fixed<<setprecision(x)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
typedef pair<double,double> pdd;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<string> vs;
typedef vector<P> vp;
typedef vector<vp> vvp;
typedef vector<pll> vpll;
typedef pair<int,P> pip;
typedef vector<pip> vip;
const int inf=1<<30;
const ll INF=1ll<<60;
const double pi=acos(-1);
const double eps=1e-9;
const ll mod=1e9+7;
const int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};

ll Pow(ll n,ll p){
	ll r=1;
	for(;p>0;p>>=1){
		if(p&1) r=(r*n)%mod;
		n=(n*n)%mod;
	}
	return r;
}

const int M=100005;
ll F[M];

void Init(){
	F[0]=1;
	for(int i=1;i<M;i++) F[i]=F[i-1]*i%mod;
}

ll Div(ll n,ll m){
	return n*Pow(m,mod-2)%mod;
}

ll n,m,k;
vl a;

vl f(){
	vl b(k),dp(k),c(n);
	int t=0;
	for(int i=0;i<m;i++){
		if(b[a[i]]){
			t=i;
			break;
		}
		b[a[i]]++;
	}
	dp[t]++;c[0]=1;
	for(int i=1;i<n;i++){
		vl DP(k);
		for(int j=0;j<k;j++){
			(DP[1]+=dp[j])%=mod;
			if(j<k-1) (DP[j+1]+=dp[j]*(k-j-1))%=mod;
			if(j<k-2) (DP[j+2]+=mod-dp[j]*(k-j)%mod)%=mod;
		}
		for(int j=1;j<k;j++) (DP[j]+=DP[j-1])%=mod;
		dp=DP;
		for(int j=0;j<k;j++) (c[i]+=dp[j])%=mod;
	}
	reverse(a.begin(),a.end());
	return c;
}

int main(){
	Init();
	cin>>n>>k>>m;
	a=vl(m);
	ll t=n-m+1;
	for(int i=0;i<n-m;i++) (t*=k)%=mod;
	for(auto &i:a){
		cin>>i;
		i--;
	}
	for(int i=k-1;i<m;i++){
		vl b(k);
		for(int j=i-k+1;j<=i;j++) b[a[j]]++;
		if(b==vl(k,1)){
			cout<<t<<endl;
			return 0;
		}
	}
	vl b(k);
	bool B=0;
	for(int i=0;i<m;i++){
		if(b[a[i]]) B=1;
		b[a[i]]++;
	}
	if(B){
		vl dpl=f(),dpr=f();
		ll sum=0;
		for(int i=0;i<=n-m;i++) (sum+=dpl[i]*dpr[n-m-i])%=mod;
		cout<<(t-sum+mod)%mod<<endl;
	}
	else{
		vl dp(k),dp1(k);
		dp[0]++;
		for(int i=0;i<n;i++){
			vl DP(k),DP1(k);
			for(int j=0;j<k;j++){
				(DP[1]+=dp[j])%=mod;
				if(j<k-1) (DP[j+1]+=dp[j]*(k-j-1))%=mod;
				if(j<k-2) (DP[j+2]+=mod-dp[j]*(k-j)%mod)%=mod;
				(DP1[1]+=dp1[j])%=mod;
				if(j<k-1) (DP1[j+1]+=dp1[j]*(k-j-1))%=mod;
				if(j<k-2) (DP1[j+2]+=mod-dp1[j]*(k-j)%mod)%=mod;
			}
			for(int j=1;j<k;j++) (DP[j]+=DP[j-1])%=mod;
			for(int j=1;j<k;j++) (DP1[j]+=DP1[j-1])%=mod;
			for(int j=m;j<k;j++) (DP1[j]+=DP[j])%=mod;
			dp=DP,dp1=DP1;
		}
		ll sum=0;
		for(auto i:dp1) (sum+=i)%=mod;
		sum=Div(sum*F[k-m]%mod,F[k]);
		cout<<(t-sum+mod)%mod<<endl;
	}
}