#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,a,b;
int r[100005],total;
int r2,r3;
bool v[100005];
int dis[100005],head[100005];
struct node{
int fr,to,val;
}e[200005];
void spfa(){
queue<int> q;
q.push(a);
while(!q.empty()){
int rp=q.front();
q.pop();
v[rp]=false;
for(int i=head[rp];i;i=e[i].fr){
r3=e[i].to;
if(dis[rp]+e[i].val<dis[r3]){
dis[r3]=dis[rp]+e[i].val;
if(!v[r3]){
q.push(r3);
v[r3]=true;
}
}
}
}
}
signed main(){
cin>>n>>m;
cin>>a>>b;
for(int i=0;i<n;++i) cin>>r[i];
for(int i=1;i<=m;i++){
scanf("%d%d",&r2,&r3);
e[++total].fr=head[r2];
e[total].to=r3;
e[total].val=r[r3]-r[r2]+1;
head[r2]=total;
}
for(int i=1;i<=n;i++) dis[i]=INT_MAX-1;
dis[a]=0;
spfa();
if(dis[b]==INT_MAX-1) cout<<"No solution";
else cout<<dis[b];
return 0;
}