#include <bits/stdc++.h>
using namespace std;
#define TASK ""
using ll = long long;
using pii = pair<int,int>;
#define fi first
#define se second
#define pub push_back
#define pob pop_back
#define mpa make_pair
#define forr(i,l,r) for(int i = (l); i <= (r); ++i)
#define fodd(i,l,r) for(int i = (l); i >= (r); --i)
const int MAXN = 300000 + 10;
const int MOD = 1000000007;
int n, m, k;
vector<string> luu;
struct Node {
int a[26];
bool ok;
Node() {
ok = false;
memset(a, 0, sizeof a);
}
};
static Node trie[MAXN];
int numNode = 0;
void addtrie(const string &s) {
int id = 0;
for (char ch : s) {
int c = ch - 'a';
if (trie[id].a[c] == 0) trie[id].a[c] = ++numNode;
id = trie[id].a[c];
}
trie[id].ok = true;
}
ll modpow(ll a, ll b) {
ll res = 1;
while (b) {
if (b & 1) res = (res * a) % MOD;
a = (a * a) % MOD;
b >>= 1;
}
return res;
}
int sz[MAXN];
ll pw[MAXN];
ll inv[MAXN];
int f[MAXN];
ll dp[MAXN];
void dfs(int id, int high) {
if (trie[id].ok) return;
int cnt = 0;
for (int c = 0; c < k; ++c) {
if (trie[id].a[c] == 0) continue;
++cnt;
dfs(trie[id].a[c], high + 1);
}
f[high + 1] += (k - cnt);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> k;
luu.reserve(n);
for (int i = 1; i <= n; ++i) {
string s; cin >> s;
luu.pub(s);
}
sort(luu.begin(), luu.end());
luu.resize(unique(luu.begin(), luu.end()) - luu.begin());
for (const string &s : luu) addtrie(s);
for (int i = 1; i <= m; ++i) cin >> sz[i];
sort(sz + 1, sz + m + 1);
pw[0] = 1;
for (int i = 1; i < MAXN; ++i) pw[i] = (1ll * k * pw[i - 1]) % MOD;
inv[MAXN - 1] = modpow(pw[MAXN - 1], MOD - 2);
for (int i = MAXN - 1; i >= 1; --i) inv[i - 1] = (inv[i] * k) % MOD;
dfs(0, 0);
dp[0] = 0;
for (int i = 1; i < MAXN; ++i) {
dp[i] = ( (dp[i - 1] * k) % MOD + f[i] ) % MOD;
}
ll ans = 1;
ll sum = 0;
for (int i = 1; i <= m; ++i) {
int len = sz[i];
ll cam = (pw[len] * sum) % MOD;
ll res = (dp[len] - cam + MOD) % MOD;
ans = (ans * res) % MOD;
sum += inv[len];
if (sum >= MOD) sum -= MOD;
}
cout << ans << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIFRBU0sgIiIKCnVzaW5nIGxsID0gbG9uZyBsb25nOwp1c2luZyBwaWkgPSBwYWlyPGludCxpbnQ+OwoKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIHB1YiBwdXNoX2JhY2sKI2RlZmluZSBwb2IgcG9wX2JhY2sKI2RlZmluZSBtcGEgbWFrZV9wYWlyCgoKI2RlZmluZSBmb3JyKGksbCxyKSBmb3IoaW50IGkgPSAobCk7IGkgPD0gKHIpOyArK2kpCiNkZWZpbmUgZm9kZChpLGwscikgZm9yKGludCBpID0gKGwpOyBpID49IChyKTsgLS1pKQoKY29uc3QgaW50IE1BWE4gPSAzMDAwMDAgKyAxMDsKY29uc3QgaW50IE1PRCA9IDEwMDAwMDAwMDc7CgppbnQgbiwgbSwgazsKdmVjdG9yPHN0cmluZz4gbHV1OwoKc3RydWN0IE5vZGUgewogICAgaW50IGFbMjZdOwogICAgYm9vbCBvazsKICAgIE5vZGUoKSB7CiAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICBtZW1zZXQoYSwgMCwgc2l6ZW9mIGEpOwogICAgfQp9OwoKCnN0YXRpYyBOb2RlIHRyaWVbTUFYTl07CmludCBudW1Ob2RlID0gMDsKCnZvaWQgYWRkdHJpZShjb25zdCBzdHJpbmcgJnMpIHsKICAgIGludCBpZCA9IDA7CiAgICBmb3IgKGNoYXIgY2ggOiBzKSB7CiAgICAgICAgaW50IGMgPSBjaCAtICdhJzsKICAgICAgICBpZiAodHJpZVtpZF0uYVtjXSA9PSAwKSB0cmllW2lkXS5hW2NdID0gKytudW1Ob2RlOwogICAgICAgIGlkID0gdHJpZVtpZF0uYVtjXTsKICAgIH0KICAgIHRyaWVbaWRdLm9rID0gdHJ1ZTsKfQoKbGwgbW9kcG93KGxsIGEsIGxsIGIpIHsKICAgIGxsIHJlcyA9IDE7CiAgICB3aGlsZSAoYikgewogICAgICAgIGlmIChiICYgMSkgcmVzID0gKHJlcyAqIGEpICUgTU9EOwogICAgICAgIGEgPSAoYSAqIGEpICUgTU9EOwogICAgICAgIGIgPj49IDE7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CgppbnQgc3pbTUFYTl07CmxsIHB3W01BWE5dOwpsbCBpbnZbTUFYTl07CmludCBmW01BWE5dOwpsbCBkcFtNQVhOXTsKCnZvaWQgZGZzKGludCBpZCwgaW50IGhpZ2gpIHsKICAgIGlmICh0cmllW2lkXS5vaykgcmV0dXJuOwogICAgaW50IGNudCA9IDA7CiAgICBmb3IgKGludCBjID0gMDsgYyA8IGs7ICsrYykgewogICAgICAgIGlmICh0cmllW2lkXS5hW2NdID09IDApIGNvbnRpbnVlOwogICAgICAgICsrY250OwogICAgICAgIGRmcyh0cmllW2lkXS5hW2NdLCBoaWdoICsgMSk7CiAgICB9CiAgICAKICAgIGZbaGlnaCArIDFdICs9IChrIC0gY250KTsKfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGNpbiA+PiBuID4+IG0gPj4gazsKICAgIGx1dS5yZXNlcnZlKG4pOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgc3RyaW5nIHM7IGNpbiA+PiBzOwogICAgICAgIGx1dS5wdWIocyk7CiAgICB9CiAgICBzb3J0KGx1dS5iZWdpbigpLCBsdXUuZW5kKCkpOwogICAgbHV1LnJlc2l6ZSh1bmlxdWUobHV1LmJlZ2luKCksIGx1dS5lbmQoKSkgLSBsdXUuYmVnaW4oKSk7CgogICAgCiAgICBmb3IgKGNvbnN0IHN0cmluZyAmcyA6IGx1dSkgYWRkdHJpZShzKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtOyArK2kpIGNpbiA+PiBzeltpXTsKICAgIHNvcnQoc3ogKyAxLCBzeiArIG0gKyAxKTsKCiAgICBwd1swXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IE1BWE47ICsraSkgcHdbaV0gPSAoMWxsICogayAqIHB3W2kgLSAxXSkgJSBNT0Q7CgogICAgCiAgICBpbnZbTUFYTiAtIDFdID0gbW9kcG93KHB3W01BWE4gLSAxXSwgTU9EIC0gMik7CiAgICBmb3IgKGludCBpID0gTUFYTiAtIDE7IGkgPj0gMTsgLS1pKSBpbnZbaSAtIDFdID0gKGludltpXSAqIGspICUgTU9EOwoKICAgIGRmcygwLCAwKTsKCiAgICBkcFswXSA9IDA7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IE1BWE47ICsraSkgewogICAgICAgIGRwW2ldID0gKCAoZHBbaSAtIDFdICogaykgJSBNT0QgKyBmW2ldICkgJSBNT0Q7CiAgICB9CgogICAgbGwgYW5zID0gMTsKICAgIGxsIHN1bSA9IDA7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtOyArK2kpIHsKICAgICAgICBpbnQgbGVuID0gc3pbaV07CiAgICAgICAgbGwgY2FtID0gKHB3W2xlbl0gKiBzdW0pICUgTU9EOwogICAgICAgIGxsIHJlcyA9IChkcFtsZW5dIC0gY2FtICsgTU9EKSAlIE1PRDsKICAgICAgICBhbnMgPSAoYW5zICogcmVzKSAlIE1PRDsKICAgICAgICBzdW0gKz0gaW52W2xlbl07CiAgICAgICAgaWYgKHN1bSA+PSBNT0QpIHN1bSAtPSBNT0Q7CiAgICB9CgogICAgY291dCA8PCBhbnMgPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9Cg==