#include <cstring>
#include <cstdio>
#define MOD 1000000007
typedef long long ll;
inline ll quick_pow(ll a, int n)
{
	ll res = 1;
	while (n)
	{
		if (n & 1)
			res = res * a % MOD;
		a = a * a % MOD;
		n >>= 1;
	}
	return res;
}
ll dp[25005][405], pre[25005][405];
int arr[25005];
bool vis[405];
int main()
{
	// freopen("ARC100-F.in", "r", stdin); 
	int n, k, m;
	scanf("%d%d%d", &n, &k, &m);
	for (int i = 0; i < m; i++)
		scanf("%d", arr + i);
	bool flg = false;
	for (int i = 0; i + k <= m && !flg; i++)
	{
		memset(vis, false, sizeof(vis));
		int cnt = 0;
		for (int j = 0; j < k; j++)
		{
			cnt += !vis[arr[i + j]];
			vis[arr[i + j]] = true;
		}
		flg |= cnt == k;
	}
	ll ans = quick_pow(k, n - m) * (n - m + 1) % MOD;
	if (flg)
	{
		printf("%lld\n", ans);
		return 0;
	}
	memset(vis, false, sizeof(vis));
	int lp = -1, rp = -1;
	for (int i = 0; i < m && -1 == lp; i++)
	{
		if (!vis[arr[i]])
			vis[arr[i]] = true;
		else
			lp = i;
	}
	memset(vis, false, sizeof(vis));
	for (int i = m - 1; i >= 0 && -1 == rp; i--)
	{
		if (!vis[arr[i]])
			vis[arr[i]] = true;
		else
			rp = i;
	}
	for (int i = 1; i < k; i++)
	{
		dp[0][i] = 1;
		pre[0][i] = i;
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j < k; j++)
		{
			dp[i][j] = (dp[i - 1][j + 1] * (k - j) + pre[i - 1][j]) % MOD;
			pre[i][j] = (pre[i][j - 1] + dp[i][j]) % MOD;
		}
	}
	for (int i = 0; i + m <= n; i++)
	{
		if (~lp)
			(ans -= dp[i][lp] * dp[n - i - m][m - rp - 1]) %= MOD;
		else
		{
			ll coef = 1;
			for (int j = m; j < k && i + j < n; j++)
			{
				(ans -= dp[i][j] * pre[n - (i + j) - 1][j] % MOD * coef) %= MOD;
				coef = coef * (k - j) % MOD;
			}
			if (n - i < k)
				(ans -= dp[i][n - i] * coef) %= MOD;
		}
	}
	printf("%lld\n", (ans + MOD) % MOD);
	return 0;
}
