#include<bits/stdc++.h>
using namespace std;

const int mod = 1e9 + 7;
const int MN = 25002;

int exp(int x, int n) {
    int ret = 1;
    while(n) {
        if(n & 1) ret = 1LL * ret * x % mod;
        x = 1LL * x * x % mod;
        n >>= 1;
    }
    return ret;
}
int inv(int x) {
    return exp(x, mod - 2);
}
int fact[MN], invf[MN];

int N, K, M, ans;
int A[MN];
int cnt[402], dp1[MN][402], dp2[MN][402], psum[402];

int main() {
    fact[0] = 1;
    for(int i = 1; i < MN; i++) {
        fact[i] = 1LL * fact[i - 1] * i % mod;
    }
    for(int i = 0; i < MN; i++) {
        invf[i] = inv(fact[i]);
    }

    scanf("%d %d %d", &N, &K, &M);

    for(int i = 0; i < M; i++) {
        scanf("%d", &A[i]);
    }

    ans = 1LL * (N - M + 1) * exp(K, N - M) % mod;

    for(int i = 0; i <= M - K; i++) {
        memset(cnt, 0, sizeof(cnt));
        bool ok = true;
        for(int j = 0; j < K; j++) {
            if(cnt[ A[i + j] ]) {
                ok = false;
                break;
            }
            cnt[ A[i + j] ] = 1;
        }
        if(ok) {
            printf("%d", ans);
            return 0;
        }
    }

    for(int j = 1; j < K; j++) {
        dp1[0][j] = 1;
        psum[j] = dp1[0][j];
        if(j) {
            psum[j] += psum[j - 1];
            psum[j] %= mod;
        }
    }
    for(int i = 1; i <= N; i++) {
        for(int j = 1; j < K; j++) {
            dp1[i][j] = psum[j];
            if(j + 1 < K) {
                dp1[i][j] += 1LL * (K - j) * dp1[i - 1][j + 1] % mod;
                dp1[i][j] %= mod;
            }
        }
        for(int j = 1; j < K; j++) {
            psum[j] = dp1[i][j];
            if(j) {
                psum[j] += psum[j - 1];
                psum[j] %= mod;
            }
        }
    }

    for(int j = 1; j < K; j++) {
        dp2[0][j] = j >= M;
        psum[j] = dp2[0][j];
        if(j) {
            psum[j] += psum[j - 1];
            psum[j] %= mod;
        }
    }
    for(int i = 1; i <= N; i++) {
        for(int j = 1; j < K; j++) {
            dp2[i][j] = (j >= M? dp1[i][j] : 0);
            dp2[i][j] += psum[j];
            dp2[i][j] %= mod;
            if(j + 1 < K) {
                dp2[i][j] += 1LL * (K - j) * dp2[i - 1][j + 1] % mod;
                dp2[i][j] %= mod;
            }
        }
        for(int j = 1; j < K; j++) {
            psum[j] = dp2[i][j];
            if(j) {
                psum[j] += psum[j - 1];
                psum[j] %= mod;
            }
        }
    }

    int a = M;
    int b = -1;
    memset(cnt, 0, sizeof(cnt));
    for(int i = 0; i < M; i++) {
        if(cnt[ A[i] ]) {
            a = i;
            break;
        }
        cnt[ A[i] ] = 1;
    }
    memset(cnt, 0, sizeof(cnt));
    for(int i = M - 1; i >= 0; i--) {
        if(cnt[ A[i] ]) {
            b = M - 1 - i;
            break;
        }
        cnt[ A[i] ] = 1;
    }
    if(a == M) {
        ans += mod - 1LL * K * dp2[N - 1][1] % mod * invf[K] % mod * fact[K - M] % mod;
        ans %= mod;
        printf("%d", ans);
        return 0;
    }

    for(int i = 0; i <= N - M; i++) {
        ans += mod - 1LL * dp1[i][a] * dp1[N - M - i][b] % mod;
        ans %= mod;
    }
    printf("%d", ans);
}


Measured memory_bytes: 79104