#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const int M = 239;
const int A = 30;
const ll inf = ll(2e18) + 10;
struct Node {
Node* next[A];
Node* p;
int by;
int cost;
Node* link;
Node* go[A];
int id;
Node() {
fill(next, next + A, nullptr);
p = nullptr;
by = -1;
cost = 0;
link = nullptr;
fill(go, go + A, nullptr);
id = -1;
}
} pool[M];
int last = 0;
Node *getNode() {
pool[last].id = last;
return pool + last++;
}
int n;
ll l;
int a[M], b[M];
vector<int> g[M];
Node *root;
Node* go(Node *cur, int x);
Node* getLink(Node *cur);
Node* getLink(Node *cur) {
if (cur->link == nullptr) {
if (cur == root || cur->p == root)
cur->link = root;
else
cur->link = go(getLink(cur->p), cur->by);
}
return cur->link;
}
Node* go(Node *cur, int x) {
if (cur->go[x] == nullptr) {
if (cur->next[x] != nullptr)
cur->go[x] = cur->next[x];
else
cur->go[x] = cur == root ? root : go(getLink(cur), x);
}
return cur->go[x];
}
void read() {
cin >> n >> l;
for (int i = 0; i < n; ++i)
cin >> a[i];
root = getNode();
for (int i = 0; i < n; ++i) {
string s;
cin >> s;
Node *cur = root;
for (char c : s) {
int x = c - 'a';
if (cur->next[x] == nullptr) {
cur->next[x] = getNode();
Node *nxt = cur->next[x];
nxt->p = cur;
nxt->by = x;
}
cur = cur->next[x];
}
cur->cost += a[i];
}
}
struct Matrix {
ll a[M][M];
Matrix() {
for (int i = 0; i < M; ++i)
fill(a[i], a[i] + M, -inf);
}
ll* operator[](int x) {
return a[x];
}
} I;
Matrix operator*(Matrix &A, Matrix &B) {
Matrix C;
for (int i = 0; i < M; ++i)
for (int k = 0; k < M; ++k)
for (int j = 0; j < M; ++j) {
C[i][j] = max(A[i][k] + B[k][j], C[i][j]);
}
return C;
}
Matrix bin(Matrix A, ll to) {
Matrix B = I;
while (to) {
if (to & 1)
B = B * A;
A = A * A;
to >>= 1;
}
return B;
}
void kill() {
for (int i = 0; i < M; ++i)
I[i][i] = 0;
for (int i = 0; i < last; ++i) {
Node *cur = pool + i;
while (cur != root) {
b[i] += cur->cost;
cur = getLink(cur);
}
cur = pool + i;
for (int x = 0; x < A; ++x)
g[i].push_back(go(cur, x) - pool);
}
Matrix A;
for (int i = 0; i < last; ++i)
for (int to : g[i])
A[i][to] = max<ll>(A[i][to], b[to]);
A = bin(A, l);
ll ans = 0;
for (int i = 0; i < last; ++i)
ans = max(ans, A[0][i]);
cout << ans << "\n";
}
int main() {
cout.precision(20);
cout << fixed;
ios_base::sync_with_stdio(false);
read();
kill();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7Cgpjb25zdCBpbnQgTSA9IDIzOTsKY29uc3QgaW50IEEgPSAzMDsKY29uc3QgbGwgaW5mID0gbGwoMmUxOCkgKyAxMDsKCnN0cnVjdCBOb2RlIHsKICBOb2RlKiBuZXh0W0FdOwogIE5vZGUqIHA7CiAgaW50IGJ5OwogIGludCBjb3N0OwogIE5vZGUqIGxpbms7CiAgTm9kZSogZ29bQV07CiAgaW50IGlkOwoKICBOb2RlKCkgewogICAgZmlsbChuZXh0LCBuZXh0ICsgQSwgbnVsbHB0cik7CiAgICBwID0gbnVsbHB0cjsKICAgIGJ5ID0gLTE7CiAgICBjb3N0ID0gMDsKICAgIGxpbmsgPSBudWxscHRyOwogICAgZmlsbChnbywgZ28gKyBBLCBudWxscHRyKTsKICAgIGlkID0gLTE7CiAgfQoKfSBwb29sW01dOwoKaW50IGxhc3QgPSAwOwoKTm9kZSAqZ2V0Tm9kZSgpIHsKICBwb29sW2xhc3RdLmlkID0gbGFzdDsKICByZXR1cm4gcG9vbCArIGxhc3QrKzsKfQoKaW50IG47CmxsIGw7CmludCBhW01dLCBiW01dOwp2ZWN0b3I8aW50PiBnW01dOwpOb2RlICpyb290OwoKTm9kZSogZ28oTm9kZSAqY3VyLCBpbnQgeCk7Ck5vZGUqIGdldExpbmsoTm9kZSAqY3VyKTsKCk5vZGUqIGdldExpbmsoTm9kZSAqY3VyKSB7CiAgaWYgKGN1ci0+bGluayA9PSBudWxscHRyKSB7CiAgICBpZiAoY3VyID09IHJvb3QgfHwgY3VyLT5wID09IHJvb3QpCiAgICAgIGN1ci0+bGluayA9IHJvb3Q7CiAgICBlbHNlCiAgICAgIGN1ci0+bGluayA9IGdvKGdldExpbmsoY3VyLT5wKSwgY3VyLT5ieSk7CiAgfQogIHJldHVybiBjdXItPmxpbms7Cn0KCk5vZGUqIGdvKE5vZGUgKmN1ciwgaW50IHgpIHsKICBpZiAoY3VyLT5nb1t4XSA9PSBudWxscHRyKSB7CiAgICBpZiAoY3VyLT5uZXh0W3hdICE9IG51bGxwdHIpCiAgICAgIGN1ci0+Z29beF0gPSBjdXItPm5leHRbeF07CiAgICBlbHNlCiAgICAgIGN1ci0+Z29beF0gPSBjdXIgPT0gcm9vdCA/IHJvb3QgOiBnbyhnZXRMaW5rKGN1ciksIHgpOwogIH0KICByZXR1cm4gY3VyLT5nb1t4XTsKfQogIAoKdm9pZCByZWFkKCkgewogIGNpbiA+PiBuID4+IGw7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiAgICBjaW4gPj4gYVtpXTsKCiAgcm9vdCA9IGdldE5vZGUoKTsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgIHN0cmluZyBzOwogICAgY2luID4+IHM7CiAgICAKICAgIE5vZGUgKmN1ciA9IHJvb3Q7CgogICAgZm9yIChjaGFyIGMgOiBzKSB7CiAgICAgIGludCB4ID0gYyAtICdhJzsKICAgICAgaWYgKGN1ci0+bmV4dFt4XSA9PSBudWxscHRyKSB7CiAgICAgICAgY3VyLT5uZXh0W3hdID0gZ2V0Tm9kZSgpOwoKICAgICAgICBOb2RlICpueHQgPSBjdXItPm5leHRbeF07CiAgICAgICAgbnh0LT5wID0gY3VyOwogICAgICAgIG54dC0+YnkgPSB4OwoKICAgICAgfQogICAgICBjdXIgPSBjdXItPm5leHRbeF07CiAgICB9CgogICAgY3VyLT5jb3N0ICs9IGFbaV07CiAgfQp9CgpzdHJ1Y3QgTWF0cml4IHsKICBsbCBhW01dW01dOwoKICBNYXRyaXgoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE07ICsraSkKICAgICAgZmlsbChhW2ldLCBhW2ldICsgTSwgLWluZik7CiAgfQoKICBsbCogb3BlcmF0b3JbXShpbnQgeCkgewogICAgcmV0dXJuIGFbeF07CiAgfQp9IEk7CgpNYXRyaXggb3BlcmF0b3IqKE1hdHJpeCAmQSwgTWF0cml4ICZCKSB7CiAgTWF0cml4IEM7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBNOyArK2kpCiAgICBmb3IgKGludCBrID0gMDsgayA8IE07ICsraykKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBNOyArK2opIHsKICAgICAgICBDW2ldW2pdID0gbWF4KEFbaV1ba10gKyBCW2tdW2pdLCBDW2ldW2pdKTsKICAgICAgfQogIHJldHVybiBDOwp9CgpNYXRyaXggYmluKE1hdHJpeCBBLCBsbCB0bykgewogIE1hdHJpeCBCID0gSTsKICB3aGlsZSAodG8pIHsKICAgIGlmICh0byAmIDEpCiAgICAgIEIgPSBCICogQTsKICAgIEEgPSBBICogQTsKICAgIHRvID4+PSAxOwogIH0KICByZXR1cm4gQjsKfQoKdm9pZCBraWxsKCkgewogIGZvciAoaW50IGkgPSAwOyBpIDwgTTsgKytpKQogICAgSVtpXVtpXSA9IDA7CgogIGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdDsgKytpKSB7CiAgICBOb2RlICpjdXIgPSBwb29sICsgaTsKICAgIHdoaWxlIChjdXIgIT0gcm9vdCkgewogICAgICBiW2ldICs9IGN1ci0+Y29zdDsKICAgICAgY3VyID0gZ2V0TGluayhjdXIpOwogICAgfQoKICAgIGN1ciA9IHBvb2wgKyBpOwogICAgZm9yIChpbnQgeCA9IDA7IHggPCBBOyArK3gpCiAgICAgIGdbaV0ucHVzaF9iYWNrKGdvKGN1ciwgeCkgLSBwb29sKTsKICB9CiAgICAKICBNYXRyaXggQTsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBsYXN0OyArK2kpCiAgICBmb3IgKGludCB0byA6IGdbaV0pCiAgICAgIEFbaV1bdG9dID0gbWF4PGxsPihBW2ldW3RvXSwgYlt0b10pOwoKICBBID0gYmluKEEsIGwpOwoKICBsbCBhbnMgPSAwOwogIGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdDsgKytpKQogICAgYW5zID0gbWF4KGFucywgQVswXVtpXSk7CgogIGNvdXQgPDwgYW5zIDw8ICJcbiI7Cn0KCmludCBtYWluKCkgewogIGNvdXQucHJlY2lzaW9uKDIwKTsKICBjb3V0IDw8IGZpeGVkOwogIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogIHJlYWQoKTsKICBraWxsKCk7Cn0=
MiA5ODUxMAo5OSAxMDAKYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJ5CmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYXo=
2 98510
99 100
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbby
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz