0pts
#include<bits/stdc++.h>
using namespace std;
int n,m,a,b;
int r[100005],total;
int r2,r3;
bitset<100005> v;
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){
if(dis[rp]+e[i].val<dis[e[i].to]){
dis[e[i].to]=dis[rp]+e[i].val;
if(!v[e[i].to]){
q.push(e[i].to);
v[e[i].to]=true;
}
}
}
}
}
int 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;
}
for(int i=1;i<=n;i++) dis[i]=INT_MAX;
dis[a]=0;
spfa();
if(dis[b]==INT_MAX) cout<<"No solution";
else cout<<dis[b];
return 0;
}