#include <iostream>
#include <set>
#include <map>
#define llint long long
#define mod 1000000007

using namespace std;

llint N, K, M;
llint A[25005];
llint dp[25005][405];
llint sum[25005][405];

llint fact[25005], fact_inv[25005];

llint pow(llint a, llint n)
{
	if(n == 0) return 1;
	if(n % 2){
		return ((a%mod) * (pow(a, n-1)%mod)) % mod;
	}
	else{
		return pow((a*a)%mod, n/2) % mod;
	}
}

void make_fact()
{
	llint val = 1;
	fact[0] = 1;
	for(int i = 1; i < 25005; i++){
		val *= i;
		val %= mod;
		fact[i] = val;
	}
	for(int i = 0; i < 25005; i++){
		fact_inv[i] = pow(fact[i], mod-2);
	}
}


int main(void)
{
	make_fact();
	cin >> N >> K >> M;
	for(int i = 1; i <= M; i++) cin >> A[i];
	
	if(N < K){
		cout << 0 << endl;
		return 0;
	}
	if(N == 1){
		cout << 1 << endl;
		return 0;
	}
	
	llint all = pow(K, N-M) * (N-M+1) % mod;
	
	llint mx = 0;
	map<llint, llint> mp;
	for(int i = 1; i <= M; i++){
		mp[A[i]]++;
		if(i > K){
			mp[A[i-K]]--;
			if(mp[A[i-K]] == 0) mp.erase(A[i-K]);
		}
		mx = max(mx, (llint)mp.size());
	}
	if(mx >= K){
		cout << all << endl;
		return 0;
	}
	
	dp[1][1] = K;
	for(int i = 2; i <= N; i++){
		for(int j = K-1; j >= 1; j--){
			if(j == K-1) dp[i][j] = (2*dp[i-1][j-1] + dp[i-1][j]) % mod;
			else{
				dp[i][j] = (dp[i][j+1] + dp[i-1][j]) % mod;
				dp[i][j] += mod - dp[i-1][j]*(K-j)%mod;
				dp[i][j] %= mod;
				dp[i][j] += dp[i-1][j-1]*(K-j+1)%mod;
				dp[i][j] %= mod;
			}
		}
		/*for(int j = 0; j <= K-1; j++){
			cout << dp[i][j] << " ";
		}
		cout << endl;*/
	}
	
	for(int i = 0; i <= N; i++){
		for(int j = 1; j < K; j++){
			sum[i][j] = (sum[i][j-1] + dp[i][j]) % mod;
		}
	}
	
	llint ans = 0;
	if(mx < M){
		llint l, r;
		set<llint> S;
		for(int i = 1; i <= M; i++){
			if(S.count(A[i])){
				l = i-1;
				break;
			}
			S.insert(A[i]);
		}
		S.clear();
		for(int i = M; i >= 1; i--){
			if(S.count(A[i])){
				r = M-i;
				break;
			}
			S.insert(A[i]);
		}
		
		for(int i = 1; i <= N-M+1; i++){
			llint left = 0, right = 0;
			llint L = l+i-1;
			for(int j = l; j <= min(L, K-1); j++){
				left += dp[L][j] * fact[K-l] % mod * fact_inv[K] % mod;
				left %= mod;
			}
			L = N-(i+M)+r+1;
			for(int j = r; j <= min(L, K-1); j++){
				right += dp[L][j] * fact[K-r] % mod * fact_inv[K] % mod;
				right %= mod;
			}
			ans += left * right % mod;
			ans %= mod;
		}
	}
	else{
		for(int i = 1; i <= N-M+1; i++){
			
			llint L = M+i-1, R, left, right;
			for(int j = M; j <= min(L, K-1); j++){
				R = N-L+j;
				left = dp[L][j] * fact[K-M] % mod * fact_inv[K] % mod;
				right = (sum[R][min(R, K-1)] - sum[R][j-1] + mod) % mod;
				right *= fact[K-j] % mod * fact_inv[K] % mod;
				right %= mod;
				ans += left * right % mod;
				ans %= mod;
			}
		}
	}
	
	ans = (all - ans + mod) % mod;
	cout << ans << endl;
	
	return 0;
}