#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0; i < n; i++)
using namespace std;
typedef long long ll;
typedef pair<ll,ll> P;
 
const double EPS = 1e-10;
const ll INF = 100000000;
const ll MOD = 1000000007;

int n, k, m;
int a[25000];
int check[401];
ll dp[2][25001][401];
ll dp2[25001][401][2];
ll kai[100000];

ll mod_pow (ll x, ll y) {
    ll ret = 1;
    while (y) {
        if (y&1) ret = ret * x % MOD;
        x = x * x % MOD;
        y /= 2;
    }
    return ret;
}

int main() {
    kai[0] = 1;
    for (int i = 1; i < 100000; i++) kai[i] = kai[i-1] * i % MOD;
    cin >> n >> k >> m;
    rep(i,m) cin >> a[i];
    int cnt = 0;
    bool flag = false;
    rep(i,m) {
        check[a[i]]++;
        if (check[a[i]] == 1) {
            cnt++;
        }
        if (i >= k) {
            check[a[i-k]]--;
            if (check[a[i-k]] == 0) {
                cnt--;
            }
        }
        if (cnt == k) {
            flag = true;
            break;
        }
    }
    if (flag) {
        cout << ((n-m+1) * mod_pow(k, n-m) % MOD) << endl;
        return 0;
    }
    if (cnt != m) {
        cnt = 0;
        memset(check, 0, sizeof(check));
        rep(i,m) {
            if (check[a[i]] > 0) {
                break;
            }
            check[a[i]]++;
            cnt++;
        }
        dp[0][0][cnt] = 1;

        cnt = 0;
        memset(check, 0, sizeof(check));
        for (int i = m-1; i >= 0; i--) {
            if (check[a[i]] > 0) {
                break;
            }
            check[a[i]]++;
            cnt++;
        }
        dp[1][0][cnt] = 1;
        
        rep(i,2) {
            for (int j = 1; j <= n; j++) {
                dp[i][j][k] = (dp[i][j-1][k]*k+dp[i][j-1][k-1])%MOD;
                ll sum = 0;
                for (int l = k-1; l >= 1; l--) {
                    sum += dp[i][j-1][l];
                    dp[i][j][l] = (dp[i][j-1][l-1]*(k-l+1)+sum)%MOD;
                }
            }
        }
        ll ans = 0;
        for (int i = 0; i <= n-m; i++) {
            int j = n-m-i;
            ans = (ans + dp[0][i][k]*mod_pow(k,j) + dp[1][j][k]*mod_pow(k,i) - dp[0][i][k]*dp[1][j][k]) % MOD;
        }
        if (ans < 0) ans += MOD;
        cout << ans << endl;
    } else {
        dp2[0][0][0] = 1;
        for (int i = 1; i <= n; i++) {
            dp2[i][k][1] = (dp2[i-1][k][1]*k+dp2[i-1][k-1][1])%MOD;
            ll sum1 = 0, sum2 = 0;
            for (int j = k-1; j >= 1; j--) {
                sum1 += dp2[i-1][j][0];
                sum2 += dp2[i-1][j][1];

                dp2[i][j][0] = (dp2[i-1][j-1][0]*(k-j+1)+sum1)%MOD;
                dp2[i][j][1] = (dp2[i-1][j-1][1]*(k-j+1)+sum2)%MOD;
                if (j >= m) {
                    dp2[i][j][1] = (dp2[i][j][1]+dp2[i][j][0])%MOD;
                }
            }
        }
        /*
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= k; j++) {
                cout << dp2[i][j][0] << " ";
            }
            cout << endl;
        }
        cout << endl;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= k; j++) {
                cout << dp2[i][j][1] << " ";
            }
            cout << endl;
        }
        */
        ll ans = mod_pow(k,n-m) * (n-m+1) % MOD;
        ll tmp = 0;
        for (int i = 1; i < k; i++) {
            tmp = (tmp + dp2[n][i][1]) % MOD;
        }
        tmp = tmp * kai[k-m] % MOD;
        tmp = tmp * mod_pow(kai[k], MOD-2) % MOD;
        ans = (ans - tmp + MOD) % MOD;
        cout << ans << endl;
    }
}


Measured memory_bytes: 159616