//#define __USE_MINGW_ANSI_STDIO 0
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

#define debug(x) cout<<#x<<" :: "<<x<<endl;
#define debug2(x,y) cout<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<endl;
#define debug3(x,y,z) cout<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<endl;

#define boost ios::sync_with_stdio(0); cin.tie(0)

#define fi first
#define se second

typedef long long ll;
typedef double ld;
typedef pair<int, int> pii;

const int N = 25000 + 5;
const int K = 400 + 5;
const int MOD = 1e9 + 7;

/***************************************************************************/

ll power(ll a, ll n, ll m = MOD) {
	if(n == 0) return 1;
	ll p = power(a, n>>1, m);
	p = (p * p) % m;
	if(n & 1) p = (p * a) % m;
	return p;
}

ll fact[N], ifact[N];

void calculateFact() {

	fact[0] = 1;

	for(int i=1; i<N; i++) {
		fact[i] = (i * fact[i-1]) % MOD;
	}
	ifact[N-1] = power(fact[N-1], MOD-2, MOD);

	for(int i=N-1; i>=1; i--) {
		ifact[i-1] = (i * ifact[i]) % MOD;
	}
}

ll nck(int n, int k) {
	
	if(n < k || k < 0) return 0;

	ll ans = fact[n];
	ans = (ans * ifact[k]) % MOD;
	ans = (ans * ifact[n-k]) % MOD;

	return ans;
}

ll DP1[N][K], DP2[N][K];

int A[N], F[K];

int main() {

	boost;
	calculateFact();

	int n, k, m; cin>>n>>k>>m;

	int at = 1;
	int mx = 0;
	int mx1 = 0;
	int mx2 = 0;

	for(int i=1; i<=m; i++) {
		cin>>A[i];
		F[A[i]]++;

		while(F[A[i]] > 1) {
			F[A[at]]--;
			at++;
		}
		mx = max(mx, i-at+1);
		if(at == 1) mx1 = i - at + 1;
	}
	mx2 = m - at + 1;

	ll tot = ((n-m+1) * power(k, n-m)) % MOD;

	if(mx == k) {
		cout<<tot<<"\n";
	}
	else if(mx == m) {
		for(int j=0; j<k; j++) {
			DP1[0][j] = 1;
		}
		for(int i=1; i<=n; i++) {
			for(int j=1; j<k; j++) {
				DP1[i][j] = ((k-j+1) * (DP1[i-1][j-1] - ((j > 1) ? DP1[i-1][j-2] : 0))) % MOD;
				DP1[i][j] = (DP1[i][j] + DP1[i-1][k-1] - DP1[i-1][j-1] + DP1[i][j-1]) % MOD;
				if(DP1[i][j] < 0) DP1[i][j] += MOD;
			}
		}
		for(int i=1; i<=n; i++) {
			for(int j=1; j<k; j++) {
				DP2[i][j] = ((k-j+1) * (DP2[i-1][j-1] - ((j > 1) ? DP2[i-1][j-2] : 0))) % MOD;
				DP2[i][j] = (DP2[i][j] + DP2[i-1][k-1] - DP2[i-1][j-1] + DP2[i][j-1] + ((j < m) ? 0 : DP1[i][j] - DP1[i][j-1])) % MOD;
				if(DP2[i][j] < 0) DP2[i][j] += MOD;
			}
		}
		ll tot_per = (nck(k, m) * fact[m]) % MOD;
		ll ans = (DP2[n][k-1] * power(tot_per, MOD-2)) % MOD;
		ans = tot - ans;
		if(ans < 0) ans += MOD;
		cout<<ans<<"\n";
	}
	else {
		for(int j=mx1; j<k; j++) {
			DP1[0][j] = 1;
		}
		for(int i=1; i<=n-m; i++) {
			for(int j=1; j<k; j++) {
				DP1[i][j] = ((k-j+1) * (DP1[i-1][j-1] - ((j > 1) ? DP1[i-1][j-2] : 0))) % MOD;
				DP1[i][j] = (DP1[i][j] + DP1[i-1][k-1] - DP1[i-1][j-1] + DP1[i][j-1]) % MOD;
				if(DP1[i][j] < 0) DP1[i][j] += MOD;
			}
		}
		for(int j=mx2; j<k; j++) {
			DP2[0][j] = 1;
		}
		for(int i=1; i<=n-m; i++) {
			for(int j=1; j<k; j++) {
				DP2[i][j] = ((k-j+1) * (DP2[i-1][j-1] - ((j > 1) ? DP2[i-1][j-2] : 0))) % MOD;
				DP2[i][j] = (DP2[i][j] + DP2[i-1][k-1] - DP2[i-1][j-1] + DP2[i][j-1]) % MOD;
				if(DP2[i][j] < 0) DP2[i][j] += MOD;
			}
		}
		ll ans = 0;
		for(int i=0; i<=n-m; i++) {
			ans = (ans + DP1[i][k-1] * DP2[n-m-i][k-1]) % MOD;
		}
		ans = tot - ans;
		if(ans < 0) ans += MOD;
		cout<<ans<<"\n";
	}
	
	return 0;
}