#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const int INF = 0x3f3f3f3f;
const int N = 1e5 + 5;
const int maxn = 2e6 + 5;
int za[maxn], zb[maxn];
string a, b, s;
int n, m;
void zfun(string s, int z[]) {
  int len = s.length();
  z[0] = len;
  for (int i = 1, L = 0, R = 0; i < len; i++) {
    if (R >= i)
      z[i] = min(R - i + 1, z[i - L]);
    else
      z[i] = 0;
    while (i + z[i] < len && s[z[i]] == s[i + z[i]]) ++z[i];
    if (i + z[i] - 1 > R) R = i + z[i] - 1, L = i;
  }
}
long long sum[maxn], cnt[maxn];
void add(int x, int d) {
  if (!x) return;
  for (int i = x; i <= m; i += i & (-i)) sum[i] += 1ll * d * x, cnt[i] += d;
}
long long qc(int x) {
  long long res = 0;
  for (int i = x; i; i -= i & -i) {
    res += cnt[i];
  }
  return res;
}
long long qs(int x) {
  long long res = 0;
  for (int i = x; i; i -= i & -i) {
    res += sum[i];
  }
  return res;
}
int main() {
  cin >> n >> m;
  cin >> a >> b >> s;
  zfun(s + a, za);
  reverse(s.begin(), s.end());
  reverse(b.begin(), b.end());
  zfun(s + b, zb);
  for (int i = (0); i < (n); i++)
    za[i] = min(za[i + m], m - 1), zb[i] = min(zb[i + m], m - 1);
  reverse(zb, zb + n);
  long long ans = 0;
  for (int i = (0); i < (n); i++) {
    int j = i - m + 2;
    if (j) add(za[j - 1], -1);
    add(za[i], 1);
    int x = m - zb[i];
    ans += qs(m) - qs(x - 1) - 1ll * (x - 1) * (qc(m) - qc(x - 1));
  }
  cout << ans;
  return 0;
}
