#include <bits/stdc++.h>
using namespace std; 

#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define FOR(i, a, b) for( int i = a; i < (b); i++ )

using vi = vector<int>; 
using ll = long long;
using pii = pair<int, int>;

int dijkstra( int source, int target, vector<vector<pii>> &adj ){
    vi dist(sz(adj), INT_MAX);
    set<pii> s; 
    
    s.insert({ 0, source });
    dist[source] = 0; 

    while(sz(s)){
        int u = s.begin()->second; s.erase(s.begin()); 
        for( auto [v, w] : adj[u] ) if( dist[v] > dist[u] + w ){
            s.erase({ dist[v], v }); 
            dist[v] = dist[u] + w; 
            s.insert({ dist[v], v });
        }
    }

    return dist[target];
}

void solve(){
    int n, m, x, y; cin >> n >> m >> x >> y; 

    vi h(n); 
    for( int &x : h ) cin >> x; 

    vector<vector<pii>> adj(n); 
    while( m-- ){
        int u, v; cin >> u >> v; u--; v--; 
        adj[u].push_back({ v, max(0, h[v] - h[u])});
        adj[v].push_back({ u, max(0, h[u] - h[v])});
    }

    /*
        UPs + DOWNs = h[n - 1] - h[0] 
    */

    int min_ups = dijkstra(0, n - 1, adj);
    int min_downs = min_ups - h[n - 1] + h[0]; 

    cout << ((min_ups <= x && min_downs <= y) ? 'S' : 'N') << '\n';
}

int main(){
    ios::sync_with_stdio(false); cin.tie(NULL); 
    solve();
}