#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node {
int x, y;
};
int n, m, dp[1010][1010];
node f[10010], b[10010];
string s;
int qwq(int x, int y) {
int cnt = (f[x].x - b[y].x) * (f[x].x - b[y].x);
int sum = (f[x].y - b[y].y) * (f[x].y - b[y].y);
return cnt + sum;
}
signed main() {
cin >> n >> m >> f[0].x >> f[0].y >> b[0].x >> b[0].y >> s;
for(int i = 0;i < s.size();i ++) {
if(s[i] == 'N') {
f[i + 1].x = f[i].x;
f[i + 1].y = f[i].y + 1;
}
if(s[i] == 'E') {
f[i + 1].x = f[i].x + 1;
f[i + 1].y = f[i].y;
}
if(s[i] == 'S') {
f[i + 1].x = f[i].x;
f[i + 1].y = f[i].y - 1;
}
if(s[i]=='W') {
f[i + 1].x = f[i].x - 1;
f[i + 1].y = f[i].y - 1;
}
}
cin >> s;
for(int i = 0;i < s.size();i ++) {
if(s[i] == 'N') {
b[i + 1].x = b[i].x;
b[i + 1].y = b[i].y + 1;
}
if(s[i] == 'E') {
b[i + 1].x = b[i].x + 1;
b[i + 1].y = b[i].y;
}
if(s[i] == 'S') {
b[i + 1].x = b[i].x;
b[i + 1].y = b[i].y - 1;
}
if(s[i]=='W') {
b[i + 1].x = b[i].x - 1;
b[i + 1].y = b[i].y;
}
}
dp[0][0] = 0;
for(int i = 1;i <= n;i ++) {
dp[i][0] = qwq(i, 0) + dp[i - 1][0];
}
for(int i = 1;i <= m;i ++) {
dp[0][i] = qwq(0, i) + dp[0][i - 1];
}
for(int i = 1;i <= n;i ++) {
for(int j = 1;j <= m;j ++) {
dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1]));
dp[i][j] += qwq(i, j);
}
}
cout << dp[n][m];
return 0;
}