#include <bits/stdc++.h>
using namespace std;
constexpr int N = 2.5E4, K = 4E2, P = 1E9 + 7;
int n, m, k;
int a[N], lst[K], dp[2][K], s[2][K], val[N];
int power(int base, int exp) {
    int result = 1;
    while (exp > 0) {
        if (exp & 1)
            result = 1LL * result * base % P;
        base = 1LL * base * base % P;
        exp >>= 1;
    }
    return result;
}
bool colorful() {
    memset(lst, -1, k * sizeof(int));
    for (int i = 0, j = 0; i < m; ++i) {
        if (lst[a[i]] != -1)
            j = max(j, lst[a[i]] + 1);
        if (i - j + 1 >= k)
            return true;
        lst[a[i]] = i;
    }
    return false;
}
int distinct() {
    memset(lst, -1, k * sizeof(int));
    for (int i = 0; i < m; ++i) {
        if (lst[a[i]] != -1)
            return i;
        lst[a[i]] = i;
    }
    return m;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> k >> m;
    for (int i = 0; i < m; ++i) {
        cin >> a[i];
        --a[i];
    }
    int ans = 1LL * (n - m + 1) * power(k, n - m) % P;
    int res = 0;
    if (colorful()) {
        res = 0;
    } else if (distinct() == m) {
        int cur = 0;
        memset(dp[0], 0, k * sizeof(int));
        memset(s[0], 0, k * sizeof(int));
        dp[0][0] = 1;
        for (int i = 1; i <= n; ++i) {
            cur ^= 1;
            memset(dp[cur], 0, k * sizeof(int));
            memset(s[cur], 0, k * sizeof(int));
            for (int j = k - 1, s1 = 0, s2 = 0; j >= 1; --j) {
                s1 = (s1 + dp[cur ^ 1][j]) % P;
                s2 = (s2 + s[cur ^ 1][j]) % P;
                dp[cur][j] = (s1 + 1LL * (k - j + 1) * dp[cur ^ 1][j - 1]) % P;
                s[cur][j] = (s2 + 1LL * (k - j + 1) * s[cur ^ 1][j - 1] + (j >= m ? dp[cur][j] : 0)) % P;
            }
        }
        int tmp = 1;
        for (int i = 1; i <= m; ++i)
            tmp = 1LL * tmp * (k - i + 1) % P;
        res = 1LL * accumulate(s[cur], s[cur] + k, 0LL) % P * power(tmp, P - 2) % P;
    } else {
        int llen = distinct();
        reverse(a, a + m);
        int rlen = distinct();
        memset(dp[0], 0, k * sizeof(int));
        int cur = 0;
        dp[0][llen] = 1;
        val[0] = 1;
        for (int i = 1; i <= n - m; ++i) {
            cur ^= 1;
            memset(dp[cur], 0, k * sizeof(int));
            for (int j = k - 1, s = 0; j >= 1; --j) {
                s = (s + dp[cur ^ 1][j]) % P;
                dp[cur][j] = (s + 1LL * (k - j + 1) * dp[cur ^ 1][j - 1]) % P;
            }
            val[i] = accumulate(dp[cur], dp[cur] + k, 0LL) % P;
        }
        memset(dp[0], 0, k * sizeof(int));
        cur = 0;
        dp[0][rlen] = 1;
        res = (res + val[n - m]) % P;
        for (int i = n - m - 1; i >= 0; --i) {
            cur ^= 1;
            memset(dp[cur], 0, k * sizeof(int));
            for (int j = k - 1, s = 0; j >= 1; --j) {
                s = (s + dp[cur ^ 1][j]) % P;
                dp[cur][j] = (s + 1LL * (k - j + 1) * dp[cur ^ 1][j - 1]) % P;
            }
            res = (res + 1LL * accumulate(dp[cur], dp[cur] + k, 0LL) % P * val[i]) % P;
        }
    }
    ans = (ans - res + P) % P;
    cout << ans << endl;
    return 0;
}

Measured memory_bytes: 384