#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define ii pair<int, int>
#define fi first
#define se second
using namespace std;
struct HASH
{
int n, BASE, MOD;
string s;
vector<ll> h, p;
HASH(int n = 0, int BASE = 0, int MOD = 0, string s = "") :
n(n), BASE(BASE), MOD(MOD), s(s)
{
h.assign(n + 5, 0);
p.assign(n + 5, 0);
p[0] = 1;
for (int i = 1; i <= n; i++)
{
h[i] = (h[i - 1] * BASE + s[i]) % MOD;
p[i] = BASE * p[i - 1] % MOD;
}
}
ll get_hash(int l, int r)
{
ll a = h[r] - h[l - 1] * p[r - l + 1] % MOD;
a %= MOD;
a += MOD;
return a % MOD;
}
};
struct Fenwick_Tree
{
int maxn;
vector<ii> bit;
Fenwick_Tree(int n = 0) : maxn(n)
{
bit.assign(n + 5, {0, 0});
}
void update(int x, ii v)
{
for (;x <= maxn; x += x &- x)
bit[x] = {bit[x].fi + v.fi, bit[x].se + v.se};
}
ii get(int x)
{
ii ans = {0, 0};
for (; x; x &= x - 1)
ans = {ans.fi + bit[x].fi, ans.se + bit[x].se};
return ans;
}
};
const int maxn = 2e5;
const int MOD = 998244353;
const int BASE = 256;
int n, m;
ll ans = 0, sum_y = 0;
string s_1, s_2, fin;
HASH h_1, h_2, h_t;
vector<ii> a, b;
vector<ll> v;
Fenwick_Tree tree;
int bs_prefix(int l, int r)
{
int pivot = l;
int ans = 0;
while (l <= r)
{
int m = l + r >> 1;
ll x = h_1.get_hash(pivot, m);
ll y = h_t.get_hash(1, m - pivot + 1);
// cout << pivot << ' ' << m << ' ' << m - pivot + 1 << ' ' << x << ' ' << y, el;
if (x == y)
{
ans = m;
l = m + 1;
}
else
r = m - 1;
}
return ans;
}
int bs_suffix(int l, int r)
{
int pivot = r;
int ans = 0;
while (l <= r)
{
int mid = l + r >> 1;
ll x = h_2.get_hash(mid, pivot);
ll y = h_t.get_hash(m - (pivot - mid + 1) + 1, m);
// cout << mid << ' ' << pivot << ' ' << m - (pivot - mid + 1) + 1 << ' ' << m << ' ' << x << ' ' << y, el;
if (x == y)
{
ans = mid ;
r = mid - 1;
}
else
l = mid + 1;
}
return ans;
}
bool cmp(ii a, ii b)
{
return a.se - a.fi < b.se - b.fi;
}
bool cmp_2(ii a, ii b)
{
return a.se < b.se || (a.se == b.se && a.fi < b.fi);
}
int get_id(ll x)
{
return lower_bound(v.begin(), v.end(), x) - v.begin() + 1;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("OBSTACLE.INP", "r"))
{
freopen("OBSTACLE.INP", "r", stdin);
freopen("OBSTACLE.OUT", "w", stdout);
}
cin >> n >> m;
cin >> s_1;
cin >> s_2;
cin >> fin;
h_1 = HASH(n, BASE, MOD, " " + s_1);
h_2 = HASH(n, BASE, MOD, " " + s_2);
h_t = HASH(m, BASE, MOD, " " + fin);
for (int i = 1; i <= n; i++)
{
int x = bs_prefix(i, min(n, i + m - 1));
int y = bs_suffix(max(1, i - m + 1), i);
if (x)
a.push_back({i, x});
if (y)
b.push_back({y, i});
}
sort(a.begin(), a.end(), cmp);
sort(b.begin(), b.end(), cmp);
for (int i = 0, j = 0; i < a.size(); i++)
{
while (j < b.size() && a[i].se - a[i].fi - m >= b[j].fi - b[j].se - 2)
{
sum_y += min(0, b[j].se - b[j].fi + 2 - m);
j++;
}
ans += (a[i].se - a[i].fi + 1) * j + sum_y;
}
sort(a.begin(), a.end());
sort(b.begin(), b.end(), cmp_2);
for (ii pr : a)
v.push_back(pr.se - pr.fi - m);
for (ii pr : b)
v.push_back(pr.fi - pr.se - 2);
sort(v.begin(), v.end());
// for (ii pr : a)
// cout << pr.fi << ' ' << pr.se, el;
// for (ii pr : b)
// cout << pr.fi << ' ' << pr.se, el;
tree = Fenwick_Tree(v.size() + 5);
for (int i = a.size() - 1, j = b.size() - 1; i >= 0; i--)
{
while (j >= 0 && a[i].fi < b[j].se + 2 - m)
{
tree.update(get_id(b[j].fi - b[j].se - 2), {1, min(0, b[j].se - b[j].fi + 2 - m)});
j--;
}
ii x = tree.get(get_id(a[i].se - a[i].fi - m));
ans -= (a[i].se - a[i].fi + 1) * x.fi + x.se;
}
tree = Fenwick_Tree(v.size() + 5);
for (int i = 0, j = 0; i < a.size(); i++)
{
while (j < b.size() && b[j].se < a[i].fi)
{
tree.update(get_id(b[j].fi - b[j].se - 2), {1, min(0, b[j].se - b[j].fi + 2 - m)});
j++;
}
ii x = tree.get(get_id(a[i].se - a[i].fi - m));
ans -= (a[i].se - a[i].fi + 1) * x.fi + x.se;
}
// for (ii prx : a)
// for (ii pry : b)
// if (prx.fi < pry.se + 2 - m)
// cout << prx.fi << ' ' << prx.se << ' ' << pry.fi << ' ' << pry.se, el;
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgSEFTSAp7CiAgICBpbnQgbiwgQkFTRSwgTU9EOwogICAgc3RyaW5nIHM7CiAgICB2ZWN0b3I8bGw+IGgsIHA7CgogICAgSEFTSChpbnQgbiA9IDAsIGludCBCQVNFID0gMCwgaW50IE1PRCA9IDAsIHN0cmluZyBzID0gIiIpIDoKICAgICAgICBuKG4pLCBCQVNFKEJBU0UpLCBNT0QoTU9EKSwgcyhzKQogICAgICAgIHsKICAgICAgICAgICAgaC5hc3NpZ24obiArIDUsIDApOwogICAgICAgICAgICBwLmFzc2lnbihuICsgNSwgMCk7CiAgICAgICAgICAgIHBbMF0gPSAxOwogICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGhbaV0gPSAoaFtpIC0gMV0gKiBCQVNFICsgc1tpXSkgJSBNT0Q7CiAgICAgICAgICAgICAgICBwW2ldID0gQkFTRSAqIHBbaSAtIDFdICUgTU9EOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgbGwgZ2V0X2hhc2goaW50IGwsIGludCByKQogICAgewogICAgICAgIGxsIGEgPSBoW3JdIC0gaFtsIC0gMV0gKiBwW3IgLSBsICsgMV0gJSBNT0Q7CiAgICAgICAgYSAlPSBNT0Q7CiAgICAgICAgYSArPSBNT0Q7CiAgICAgICAgcmV0dXJuIGEgJSBNT0Q7CiAgICB9Cn07CnN0cnVjdCBGZW53aWNrX1RyZWUKewogICAgaW50IG1heG47CiAgICB2ZWN0b3I8aWk+IGJpdDsKCiAgICBGZW53aWNrX1RyZWUoaW50IG4gPSAwKSA6IG1heG4obikKICAgIHsKICAgICAgICBiaXQuYXNzaWduKG4gKyA1LCB7MCwgMH0pOwogICAgfQogICAgdm9pZCB1cGRhdGUoaW50IHgsIGlpIHYpCiAgICB7CiAgICAgICAgZm9yICg7eCA8PSBtYXhuOyB4ICs9IHggJi0geCkKICAgICAgICAgICAgYml0W3hdID0ge2JpdFt4XS5maSArIHYuZmksIGJpdFt4XS5zZSArIHYuc2V9OwogICAgfQogICAgaWkgZ2V0KGludCB4KQogICAgewogICAgICAgIGlpIGFucyA9IHswLCAwfTsKICAgICAgICBmb3IgKDsgeDsgeCAmPSB4IC0gMSkKICAgICAgICAgICAgYW5zID0ge2Fucy5maSArIGJpdFt4XS5maSwgYW5zLnNlICsgYml0W3hdLnNlfTsKICAgICAgICByZXR1cm4gYW5zOwogICAgfQp9OwoKY29uc3QgaW50IG1heG4gPSAyZTU7CmNvbnN0IGludCBNT0QgPSA5OTgyNDQzNTM7CmNvbnN0IGludCBCQVNFID0gMjU2OwoKaW50IG4sIG07CmxsIGFucyA9IDAsIHN1bV95ID0gMDsKc3RyaW5nIHNfMSwgc18yLCBmaW47CkhBU0ggaF8xLCBoXzIsIGhfdDsKdmVjdG9yPGlpPiBhLCBiOwp2ZWN0b3I8bGw+IHY7CkZlbndpY2tfVHJlZSB0cmVlOwoKaW50IGJzX3ByZWZpeChpbnQgbCwgaW50IHIpCnsKICAgIGludCBwaXZvdCA9IGw7CiAgICBpbnQgYW5zID0gMDsKICAgIHdoaWxlIChsIDw9IHIpCiAgICB7CiAgICAgICAgaW50IG0gPSBsICsgciA+PiAxOwogICAgICAgIGxsIHggPSBoXzEuZ2V0X2hhc2gocGl2b3QsIG0pOwogICAgICAgIGxsIHkgPSBoX3QuZ2V0X2hhc2goMSwgbSAtIHBpdm90ICsgMSk7Ci8vICAgICAgICBjb3V0IDw8IHBpdm90IDw8ICcgJyA8PCBtIDw8ICcgJyA8PCBtIC0gcGl2b3QgKyAxIDw8ICcgJyA8PCB4IDw8ICcgJyA8PCB5LCBlbDsKICAgICAgICBpZiAoeCA9PSB5KQogICAgICAgIHsKICAgICAgICAgICAgYW5zID0gbTsKICAgICAgICAgICAgbCA9IG0gKyAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgIHIgPSBtIC0gMTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KaW50IGJzX3N1ZmZpeChpbnQgbCwgaW50IHIpCnsKICAgIGludCBwaXZvdCA9IHI7CiAgICBpbnQgYW5zID0gMDsKICAgIHdoaWxlIChsIDw9IHIpCiAgICB7CiAgICAgICAgaW50IG1pZCA9IGwgKyByID4+IDE7CiAgICAgICAgbGwgeCA9IGhfMi5nZXRfaGFzaChtaWQsIHBpdm90KTsKICAgICAgICBsbCB5ID0gaF90LmdldF9oYXNoKG0gLSAocGl2b3QgLSBtaWQgKyAxKSArIDEsIG0pOwovLyAgICAgICAgY291dCA8PCBtaWQgPDwgJyAnIDw8IHBpdm90IDw8ICcgJyA8PCBtIC0gKHBpdm90IC0gbWlkICsgMSkgKyAxIDw8ICcgJyA8PCBtIDw8ICcgJyA8PCB4IDw8ICcgJyA8PCB5LCBlbDsKICAgICAgICBpZiAoeCA9PSB5KQogICAgICAgIHsKICAgICAgICAgICAgYW5zID0gbWlkIDsKICAgICAgICAgICAgciA9IG1pZCAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgbCA9IG1pZCArIDE7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9CmJvb2wgY21wKGlpIGEsIGlpIGIpCnsKICAgIHJldHVybiBhLnNlIC0gYS5maSA8IGIuc2UgLSBiLmZpOwp9CmJvb2wgY21wXzIoaWkgYSwgaWkgYikKewogICAgcmV0dXJuIGEuc2UgPCBiLnNlIHx8IChhLnNlID09IGIuc2UgJiYgYS5maSA8IGIuZmkpOwp9CmludCBnZXRfaWQobGwgeCkKewogICAgcmV0dXJuIGxvd2VyX2JvdW5kKHYuYmVnaW4oKSwgdi5lbmQoKSwgeCkgLSB2LmJlZ2luKCkgKyAxOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKCJPQlNUQUNMRS5JTlAiLCAiciIpKQogICAgewogICAgICAgIGZyZW9wZW4oIk9CU1RBQ0xFLklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIk9CU1RBQ0xFLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4gPj4gbiA+PiBtOwogICAgY2luID4+IHNfMTsKICAgIGNpbiA+PiBzXzI7CiAgICBjaW4gPj4gZmluOwoKICAgIGhfMSA9IEhBU0gobiwgQkFTRSwgTU9ELCAiICIgKyBzXzEpOwogICAgaF8yID0gSEFTSChuLCBCQVNFLCBNT0QsICIgIiArIHNfMik7CiAgICBoX3QgPSBIQVNIKG0sIEJBU0UsIE1PRCwgIiAiICsgZmluKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgaW50IHggPSBic19wcmVmaXgoaSwgbWluKG4sIGkgKyBtIC0gMSkpOwogICAgICAgIGludCB5ID0gYnNfc3VmZml4KG1heCgxLCBpIC0gbSArIDEpLCBpKTsKICAgICAgICBpZiAoeCkKICAgICAgICAgICAgYS5wdXNoX2JhY2soe2ksIHh9KTsKICAgICAgICBpZiAoeSkKICAgICAgICAgICAgYi5wdXNoX2JhY2soe3ksIGl9KTsKICAgIH0KICAgIHNvcnQoYS5iZWdpbigpLCBhLmVuZCgpLCBjbXApOwogICAgc29ydChiLmJlZ2luKCksIGIuZW5kKCksIGNtcCk7CiAgICBmb3IgKGludCBpID0gMCwgaiA9IDA7IGkgPCBhLnNpemUoKTsgaSsrKQogICAgewogICAgICAgIHdoaWxlIChqIDwgYi5zaXplKCkgJiYgYVtpXS5zZSAtIGFbaV0uZmkgLSBtID49IGJbal0uZmkgLSBiW2pdLnNlIC0gMikKICAgICAgICB7CiAgICAgICAgICAgIHN1bV95ICs9IG1pbigwLCBiW2pdLnNlIC0gYltqXS5maSArIDIgLSBtKTsKICAgICAgICAgICAgaisrOwogICAgICAgIH0KICAgICAgICBhbnMgKz0gKGFbaV0uc2UgLSBhW2ldLmZpICsgMSkgKiBqICsgc3VtX3k7CiAgICB9CiAgICBzb3J0KGEuYmVnaW4oKSwgYS5lbmQoKSk7CiAgICBzb3J0KGIuYmVnaW4oKSwgYi5lbmQoKSwgY21wXzIpOwogICAgZm9yIChpaSBwciA6IGEpCiAgICAgICAgdi5wdXNoX2JhY2socHIuc2UgLSBwci5maSAtIG0pOwogICAgZm9yIChpaSBwciA6IGIpCiAgICAgICAgdi5wdXNoX2JhY2socHIuZmkgLSBwci5zZSAtIDIpOwogICAgc29ydCh2LmJlZ2luKCksIHYuZW5kKCkpOwovLyAgICBmb3IgKGlpIHByIDogYSkKLy8gICAgICAgIGNvdXQgPDwgcHIuZmkgPDwgJyAnIDw8IHByLnNlLCBlbDsKLy8gICAgZm9yIChpaSBwciA6IGIpCi8vICAgICAgICBjb3V0IDw8IHByLmZpIDw8ICcgJyA8PCBwci5zZSwgZWw7CiAgICB0cmVlID0gRmVud2lja19UcmVlKHYuc2l6ZSgpICsgNSk7CiAgICBmb3IgKGludCBpID0gYS5zaXplKCkgLSAxLCBqID0gYi5zaXplKCkgLSAxOyBpID49IDA7IGktLSkKICAgIHsKICAgICAgICB3aGlsZSAoaiA+PSAwICYmIGFbaV0uZmkgPCBiW2pdLnNlICsgMiAtIG0pCiAgICAgICAgewogICAgICAgICAgICB0cmVlLnVwZGF0ZShnZXRfaWQoYltqXS5maSAtIGJbal0uc2UgLSAyKSwgezEsIG1pbigwLCBiW2pdLnNlIC0gYltqXS5maSArIDIgLSBtKX0pOwogICAgICAgICAgICBqLS07CiAgICAgICAgfQogICAgICAgIGlpIHggPSB0cmVlLmdldChnZXRfaWQoYVtpXS5zZSAtIGFbaV0uZmkgLSBtKSk7CiAgICAgICAgYW5zIC09IChhW2ldLnNlIC0gYVtpXS5maSArIDEpICogeC5maSArIHguc2U7CiAgICB9CiAgICB0cmVlID0gRmVud2lja19UcmVlKHYuc2l6ZSgpICsgNSk7CiAgICBmb3IgKGludCBpID0gMCwgaiA9IDA7IGkgPCBhLnNpemUoKTsgaSsrKQogICAgewogICAgICAgIHdoaWxlIChqIDwgYi5zaXplKCkgJiYgYltqXS5zZSA8IGFbaV0uZmkpCiAgICAgICAgewogICAgICAgICAgICB0cmVlLnVwZGF0ZShnZXRfaWQoYltqXS5maSAtIGJbal0uc2UgLSAyKSwgezEsIG1pbigwLCBiW2pdLnNlIC0gYltqXS5maSArIDIgLSBtKX0pOwogICAgICAgICAgICBqKys7CiAgICAgICAgfQogICAgICAgIGlpIHggPSB0cmVlLmdldChnZXRfaWQoYVtpXS5zZSAtIGFbaV0uZmkgLSBtKSk7CiAgICAgICAgYW5zIC09IChhW2ldLnNlIC0gYVtpXS5maSArIDEpICogeC5maSArIHguc2U7CiAgICB9Ci8vICAgIGZvciAoaWkgcHJ4IDogYSkKLy8gICAgICAgIGZvciAoaWkgcHJ5IDogYikKLy8gICAgICAgICAgICBpZiAocHJ4LmZpIDwgcHJ5LnNlICsgMiAtIG0pCi8vICAgICAgICAgICAgICAgIGNvdXQgPDwgcHJ4LmZpIDw8ICcgJyA8PCBwcnguc2UgPDwgJyAnIDw8IHByeS5maSA8PCAnICcgPDwgcHJ5LnNlLCBlbDsKICAgIGNvdXQgPDwgYW5zOwp9Cg==