#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl '\n'
#define all(v) (v).begin(), (v).end()
#define len(v) (int)(v).size()
#define loop(i, l, r) \
for (int(i) = (l); (r) > (l) ? (i) < (r) : (i) > (r); \
(r) > (l) ? (i)++ : (i)--)
#define SuperSonic ios::sync_with_stdio(false), cin.tie(nullptr)
const int MOD = 1e9 + 7;
ll add(ll a, ll b) { return (a % MOD + b % MOD) % MOD; }
ll mult(ll a, ll b) { return (a % MOD * b % MOD) % MOD; }
ll sub(ll a, ll b) { return (a % MOD - b % MOD + MOD) % MOD; }
ll fp(ll base, ll power) {
if (power == 0)
return 1;
ll hp = fp(base, power / 2);
ll fullPower = mult(hp, hp);
if (power % 2 != 0)
fullPower = mult(fullPower, base);
return fullPower;
}
ll divi(ll a, ll b) { return mult(a, fp(b, MOD - 2)); }
void solve() {
ll n, k;
cin >> n >> k;
string s;
cin >> s;
vector<int> zf;
ll ans{}, series = divi(sub(fp(2, k * n), 1), sub(fp(2, n), 1)), ZFCurBlock{},
ZFNextBlock{};
loop(i, 0, n) {
if (s[i] == '0' || s[i] == '5') {
ans = add(ans, mult(fp(2, i), series));
zf.push_back(i);
ZFCurBlock = add(ZFCurBlock, fp(2, i));
}
}
ll kSeries = divi(sub(mult(series, fp(2, n)), k), sub(fp(2, n), 1)),
prevKSeries = sub(kSeries, series);
for (int i : zf) {
ZFCurBlock = sub(ZFCurBlock, fp(2, i));
ZFNextBlock = add(ZFNextBlock, fp(2, i + n));
if (s[i] == '0') {
ans = sub(ans, mult(kSeries, divi(ZFCurBlock, fp(2, i + 1))));
ans = sub(ans, mult(prevKSeries, divi(ZFNextBlock, fp(2, i + 1))));
}
}
cout << ans;
}
int main() {
SuperSonic;
int t = 1;
// cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBhbGwodikgKHYpLmJlZ2luKCksICh2KS5lbmQoKQojZGVmaW5lIGxlbih2KSAoaW50KSh2KS5zaXplKCkKI2RlZmluZSBsb29wKGksIGwsIHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICBmb3IgKGludChpKSA9IChsKTsgKHIpID4gKGwpID8gKGkpIDwgKHIpIDogKGkpID4gKHIpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIChyKSA+IChsKSA/IChpKSsrIDogKGkpLS0pCiNkZWZpbmUgU3VwZXJTb25pYyBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSksIGNpbi50aWUobnVsbHB0cikKCmNvbnN0IGludCBNT0QgPSAxZTkgKyA3OwoKbGwgYWRkKGxsIGEsIGxsIGIpIHsgcmV0dXJuIChhICUgTU9EICsgYiAlIE1PRCkgJSBNT0Q7IH0KCmxsIG11bHQobGwgYSwgbGwgYikgeyByZXR1cm4gKGEgJSBNT0QgKiBiICUgTU9EKSAlIE1PRDsgfQoKbGwgc3ViKGxsIGEsIGxsIGIpIHsgcmV0dXJuIChhICUgTU9EIC0gYiAlIE1PRCArIE1PRCkgJSBNT0Q7IH0KCmxsIGZwKGxsIGJhc2UsIGxsIHBvd2VyKSB7CiAgaWYgKHBvd2VyID09IDApCiAgICByZXR1cm4gMTsKCiAgbGwgaHAgPSBmcChiYXNlLCBwb3dlciAvIDIpOwogIGxsIGZ1bGxQb3dlciA9IG11bHQoaHAsIGhwKTsKCiAgaWYgKHBvd2VyICUgMiAhPSAwKQogICAgZnVsbFBvd2VyID0gbXVsdChmdWxsUG93ZXIsIGJhc2UpOwoKICByZXR1cm4gZnVsbFBvd2VyOwp9CgpsbCBkaXZpKGxsIGEsIGxsIGIpIHsgcmV0dXJuIG11bHQoYSwgZnAoYiwgTU9EIC0gMikpOyB9Cgp2b2lkIHNvbHZlKCkgewogIGxsIG4sIGs7CiAgY2luID4+IG4gPj4gazsKCiAgc3RyaW5nIHM7CiAgY2luID4+IHM7CgogIHZlY3RvcjxpbnQ+IHpmOwogIGxsIGFuc3t9LCBzZXJpZXMgPSBkaXZpKHN1YihmcCgyLCBrICogbiksIDEpLCBzdWIoZnAoMiwgbiksIDEpKSwgWkZDdXJCbG9ja3t9LAogICAgICAgICAgICBaRk5leHRCbG9ja3t9OwogIGxvb3AoaSwgMCwgbikgewogICAgaWYgKHNbaV0gPT0gJzAnIHx8IHNbaV0gPT0gJzUnKSB7CiAgICAgIGFucyA9IGFkZChhbnMsIG11bHQoZnAoMiwgaSksIHNlcmllcykpOwogICAgICB6Zi5wdXNoX2JhY2soaSk7CiAgICAgIFpGQ3VyQmxvY2sgPSBhZGQoWkZDdXJCbG9jaywgZnAoMiwgaSkpOwogICAgfQogIH0KCiAgbGwga1NlcmllcyA9IGRpdmkoc3ViKG11bHQoc2VyaWVzLCBmcCgyLCBuKSksIGspLCBzdWIoZnAoMiwgbiksIDEpKSwKICAgICBwcmV2S1NlcmllcyA9IHN1YihrU2VyaWVzLCBzZXJpZXMpOwogIGZvciAoaW50IGkgOiB6ZikgewogICAgWkZDdXJCbG9jayA9IHN1YihaRkN1ckJsb2NrLCBmcCgyLCBpKSk7CiAgICBaRk5leHRCbG9jayA9IGFkZChaRk5leHRCbG9jaywgZnAoMiwgaSArIG4pKTsKCiAgICBpZiAoc1tpXSA9PSAnMCcpIHsKICAgICAgYW5zID0gc3ViKGFucywgbXVsdChrU2VyaWVzLCBkaXZpKFpGQ3VyQmxvY2ssIGZwKDIsIGkgKyAxKSkpKTsKICAgICAgYW5zID0gc3ViKGFucywgbXVsdChwcmV2S1NlcmllcywgZGl2aShaRk5leHRCbG9jaywgZnAoMiwgaSArIDEpKSkpOwogICAgfQogIH0KCiAgY291dCA8PCBhbnM7Cn0KCmludCBtYWluKCkgewogIFN1cGVyU29uaWM7CgogIGludCB0ID0gMTsKICAvLyBjaW4gPj4gdDsKICB3aGlsZSAodC0tKSB7CiAgICBzb2x2ZSgpOwogIH0KfQo=