#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = a; i <= b; ++i)
#define FORD(i, a, b) for (int i = a; i >= b; --i)
#define ll long long
using namespace std;
const int N = 1e6 + 5;
const ll mod = 1e9 + 7;
int a[N], n, m, k;
ll cnt_len[N], ans = 1;
struct Node {
Node *child[26];
bool last;
Node() {
FOR(i, 0, 25) child[i] = NULL;
last = 0;
}
};
Node *root = new Node();
void add_word(string s) {
Node *p = root;
for (char c : s) {
int x = c - 'a';
if (p->child[x] == NULL) p->child[x] = new Node();
p = p->child[x];
}
p->last = 1;
}
void addmod(ll &a, const ll &b) {
a += b;
if (a >= mod) a -= mod;
}
void nhap() {
cin >> n >> m >> k;
FOR(i, 1, n) {
string s;
cin >> s;
add_word(s);
}
FOR(i, 1, m) cin >> a[i];
sort(a + 1, a + 1 + m);
}
void dfs(Node *p, int len) {
if (p->last) return;
int empty_cnt = 0;
FOR(i, 0, k - 1) {
if (p->child[i] == NULL) ++empty_cnt;
else dfs(p->child[i], len + 1);
}
addmod(cnt_len[len], empty_cnt);
}
void giai() {
dfs(root, 1);
int pos = 1;
FOR(i, 1, m) {
while (pos <= a[i]) {
cnt_len[pos] = (cnt_len[pos] + cnt_len[pos - 1] * k) % mod;
++pos;
}
ans = ans * cnt_len[a[i]] % mod;
--cnt_len[a[i]];
if (cnt_len[a[i]] < 0) cnt_len[a[i]] += mod;
}
cout << ans;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#define name "test"
if (fopen(name ".inp", "r")) {
freopen(name ".inp", "r", stdin);
freopen(name ".out", "w", stdout);
}
nhap();
giai();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIEZPUihpLCBhLCBiKSBmb3IgKGludCBpID0gYTsgaSA8PSBiOyArK2kpCiNkZWZpbmUgRk9SRChpLCBhLCBiKSBmb3IgKGludCBpID0gYTsgaSA+PSBiOyAtLWkpCiNkZWZpbmUgbGwgbG9uZyBsb25nCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAxZTYgKyA1Owpjb25zdCBsbCBtb2QgPSAxZTkgKyA3OwppbnQgYVtOXSwgbiwgbSwgazsKbGwgY250X2xlbltOXSwgYW5zID0gMTsgCgpzdHJ1Y3QgTm9kZSB7CiAgICBOb2RlICpjaGlsZFsyNl07CiAgICBib29sIGxhc3Q7CiAgICBOb2RlKCkgewogICAgICAgIEZPUihpLCAwLCAyNSkgY2hpbGRbaV0gPSBOVUxMOwogICAgICAgIGxhc3QgPSAwOwogICAgfQp9OwoKTm9kZSAqcm9vdCA9IG5ldyBOb2RlKCk7Cgp2b2lkIGFkZF93b3JkKHN0cmluZyBzKSB7CiAgICBOb2RlICpwID0gcm9vdDsKICAgIGZvciAoY2hhciBjIDogcykgewogICAgICAgIGludCB4ID0gYyAtICdhJzsKICAgICAgICBpZiAocC0+Y2hpbGRbeF0gPT0gTlVMTCkgcC0+Y2hpbGRbeF0gPSBuZXcgTm9kZSgpOwogICAgICAgIHAgPSBwLT5jaGlsZFt4XTsKICAgIH0KICAgIHAtPmxhc3QgPSAxOwp9Cgp2b2lkIGFkZG1vZChsbCAmYSwgY29uc3QgbGwgJmIpIHsKICAgIGEgKz0gYjsKICAgIGlmIChhID49IG1vZCkgYSAtPSBtb2Q7Cn0KCnZvaWQgbmhhcCgpIHsKICAgIGNpbiA+PiBuID4+IG0gPj4gazsKICAgIEZPUihpLCAxLCBuKSB7CiAgICAgICAgc3RyaW5nIHM7CiAgICAgICAgY2luID4+IHM7CiAgICAgICAgYWRkX3dvcmQocyk7CiAgICB9CiAgICBGT1IoaSwgMSwgbSkgY2luID4+IGFbaV07CiAgICBzb3J0KGEgKyAxLCBhICsgMSArIG0pOwp9Cgp2b2lkIGRmcyhOb2RlICpwLCBpbnQgbGVuKSB7CiAgICBpZiAocC0+bGFzdCkgcmV0dXJuOwoKICAgIGludCBlbXB0eV9jbnQgPSAwOwogICAgRk9SKGksIDAsIGsgLSAxKSB7CiAgICAgICAgaWYgKHAtPmNoaWxkW2ldID09IE5VTEwpICsrZW1wdHlfY250OwogICAgICAgIGVsc2UgZGZzKHAtPmNoaWxkW2ldLCBsZW4gKyAxKTsKICAgIH0KCiAgICBhZGRtb2QoY250X2xlbltsZW5dLCBlbXB0eV9jbnQpOwp9Cgp2b2lkIGdpYWkoKSB7CiAgICBkZnMocm9vdCwgMSk7CgogICAgaW50IHBvcyA9IDE7CiAgICBGT1IoaSwgMSwgbSkgewogICAgICAgIHdoaWxlIChwb3MgPD0gYVtpXSkgewogICAgICAgICAgICBjbnRfbGVuW3Bvc10gPSAoY250X2xlbltwb3NdICsgY250X2xlbltwb3MgLSAxXSAqIGspICUgbW9kOwogICAgICAgICAgICArK3BvczsKICAgICAgICB9CiAgICAgICAgYW5zID0gYW5zICogY250X2xlblthW2ldXSAlIG1vZDsKCiAgICAgICAgLS1jbnRfbGVuW2FbaV1dOwogICAgICAgIGlmIChjbnRfbGVuW2FbaV1dIDwgMCkgY250X2xlblthW2ldXSArPSBtb2Q7CiAgICB9CgogICAgY291dCA8PCBhbnM7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKCiAgICAjZGVmaW5lIG5hbWUgInRlc3QiCgogICAgaWYgKGZvcGVuKG5hbWUgIi5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3BlbihuYW1lICIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihuYW1lICIub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIG5oYXAoKTsKICAgIGdpYWkoKTsKCiAgICByZXR1cm4gMDsKfQo=