#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ii pair <int, int>
#define app push_back
#define all(a) a.begin(), a.end()
#define bp __builtin_popcountll
#define ll long long
#define mp make_pair
#define f first
#define s second
#define Time (double)clock()/CLOCKS_PER_SEC

const int N = 100, INF = 5e18;
vector <ii> g[N];
int dist[N];
bool in[N];

signed main() {
    #ifdef HOME
    freopen("input.txt", "r", stdin);
    #else
    #define endl '\n'
    ios_base::sync_with_stdio(0); cin.tie(0);
    #endif

    int n, m, q;
    cin >> n >> m >> q;

    string s, t;
    cin >> s >> t;

    while (q--) {

        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        --x1; --y1; --x2; --y2;

        auto add_row = [&](vector <int> &row, int x) {
            row.app(x);
            for (int i = x - 1; i >= 0; --i)
                if (s[i] != s[x]) {
                    row.app(i);
                    break;
                }   
            for (int i = x + 1; i < n; ++i)
                if (s[i] != s[x]) {
                    row.app(i);
                    break;
                }               
        };
        
        auto add_col = [&](vector <int> &col, int y) {
            col.app(y);
            for (int i = y - 1; i >= 0; --i)
                if (t[i] != t[y]) {
                    col.app(i);
                    break;
                }           
            for (int i = y + 1; i < m; ++i)
                if (t[i] != t[y]) {
                    col.app(i);
                    break;
                }           
        };

        vector <int> row;
        add_row(row, x1);
        add_row(row, x2);

        vector <int> col;
        add_col(col, y1);
        add_col(col, y2);

        auto compr = [](vector <int> &a) {
            sort(all(a));
            a.resize(unique(all(a)) - a.begin());
        };

        compr(row);
        compr(col);

        x1 = lower_bound(all(row), x1) - row.begin();
        x2 = lower_bound(all(row), x2) - row.begin();
        
        y1 = lower_bound(all(col), y1) - col.begin();
        y2 = lower_bound(all(col), y2) - col.begin();

        int S = x1 * 10 + y1;
        int T = x2 * 10 + y2;

    //E - right
    //W - left
    //N - up
    //S - down

        for (int i = 0; i < N; ++i)
            g[i].clear();            

        for (int i = 0; i < row.size(); ++i) {
            for (int j = 0; j < col.size(); ++j) {
                int u = i * 10 + j;
                if (s[row[i]] == 'E') {
                    if (j + 1 < col.size()) {
                        //cout << u << ' ' << u + 1 << ' ' << col[j+1]-col[j] << endl;
                        g[u].app(mp(u+1, col[j+1]-col[j]));                        
                    }   
                }   
                else {
                    if (j) {
                        //cout << u << ' ' << u - 1 << ' ' << col[j]-col[j-1] << endl;
                        g[u].app(mp(u-1, col[j]-col[j-1]));
                    }   
                }

                if (t[col[j]] == 'N') {
                    if (i) {
                        g[u].app(mp(u-10, row[i]-row[i-1]));
                    }   
                }   
                else {
                    if (i+1 < row.size()) {
                        g[u].app(mp(u+10, row[i+1]-row[i]));
                    }   
                }   
            }   
        }   

        for (int i = 0; i < N; ++i)
            dist[i] = INF;        

        dist[S] = 0;
        queue <int> q;
        q.push(S);
        in[S] = 1;

        /*
        for (auto e : row)
            cout << e << ' ';
        cout << endl;

        for (auto e : col)
            cout << e << ' ';
        cout << endl;
        */

        while (q.size()) {
            int u = q.front();
            in[u] = 0; q.pop();

            //cout << u << ' ' << dist[u] << endl;

            for (auto e : g[u]) {
                int v = e.f, c = e.s;
                if (dist[u]+c < dist[v]) {
                    dist[v] = dist[u]+c;
                    if (!in[v]) {
                        in[v] = 1;
                        q.push(v);
                    }   
                }   
            }
        }

        //cout << "T " << T << endl;

        if (dist[T] == INF)
            cout << -1 << endl;
        else
            cout << dist[T] << endl;
    }   
}

Measured memory_bytes: 3788