#include <bits/stdc++.h>
#define mod 1000000007
using namespace std;
int n, m, K, ans, flag, lgg, rgg, f[25005][405], g[25005][405], a[25005], aft[405], vis[405];
inline int pow(int x, int k) {
    int res = 1;
    for (;k;k >>= 1, x = 1LL * x * x % mod)
		if (k & 1)
			res = 1LL * res * x % mod;
    return res;
}
int main() {
	cin >> n >> K >> m;
    for (int i = 1; i <= m; i ++)
		cin >> a[i];
    for (int i = 1; i + K - 1 <= m; i ++) {
        int tot = 0;
        for (int j = 0; j < K; j ++)
			if (vis[a[i + j]] != i) {
				vis[a[i + j]] = i;
				tot ++;
			}
        if (tot == K) {
			flag = 1;
			break;
		}
    }
    ans = 1LL * pow(K, n - m) * (n - m + 1) % mod;
    if (flag)
		return 0 * printf("%d\n", ans);
    for (int i = 1; i <= m; i ++) if(vis[a[i]]!=n+1) vis[a[i]]=n+1; else {lgg=i;break;}
    for(int i=m;i>=1;--i) if(vis[a[i]]!=n+2) vis[a[i]]=n+2; else {rgg=i;break;}
    for(int i=1;i<K;++i) f[0][i]=1,g[0][i]=i;
    for(int i=1;i<=n;++i) for(int j=1;j<K;++j)
    {
        f[i][j]=(1LL*(K-j)*f[i-1][j+1]+g[i-1][j])%mod;
        g[i][j]=(g[i][j-1]+f[i][j])%mod;
    }
    for(int i=1;i+m-1<=n;++i)
        if(lgg) ans=(ans-1LL*f[i-1][lgg-1]*f[n-(i+m-1)][m-rgg]%mod+mod)%mod;
        else for(int j=i+m,p=1;j-i<K&&j<=n+1;++j)
        {
            ans=(ans-1LL*f[i-1][j-i]*(j>n?1:g[n-j][j-i])%mod*p%mod+mod)%mod;
            p=1LL*p*(K-m-(j-(i+m)))%mod;
        }
    cout<<ans;
    return 0;
}