#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf = LONG_LONG_MAX;
int n,m,s,t;
int cnt = 1,head[4005];
struct edge
{
int u,v,w,next;
}e[400005];
void add(int u,int v,int w)
{
cnt ++;
e[cnt].u = u;
e[cnt].v = v;
e[cnt].w = w;
e[cnt].next = head[u];
head[u] = cnt;
}
int deep[4005];
bool bfs()
{
memset(deep,0,sizeof(deep));
queue<int>q;
q.push(s);
deep[s] = 1;
while(!q.empty())
{
int u = q.front();
q.pop();
for(int i = head[u];i;i = e[i].next)
{
if(deep[e[i].v] || !e[i].w)continue;
deep[e[i].v] = deep[u] + 1;
if(e[i].v == t)return 1;
q.push(e[i].v);
}
}
return 0;
}
int dfs(int u,int minn)
{
if(u == t)return minn;
int sum = 0;
for(int i = head[u];i;i = e[i].next)
{
if(deep[u] + 1 != deep[e[i].v] || !e[i].w)continue;
int now = dfs(e[i].v,min(minn,e[i].w));
if(now)
{
sum += now;
minn -= now;
e[i].w -= now;
e[i ^ 1].w += now;
if(!minn)return sum;
}
else deep[e[i].v] = -1;
}
return sum;
}
bool bz[4005];
void print(int u)
{
bz[u] = 1;
for(int i = head[u];i;i = e[i].next)
{
if(e[i].w && !bz[e[i].v])print(e[i].v);
}
}
int ans[2005];
signed main()
{
cin >> n >> m >> s >> t;
for(int i = 1;i <= n;i ++)
{
int c;
cin >> c;
add(i,i + n,c);
add(i + n,i,0);
}
for(int i = 1;i <= m;i ++)
{
int u,v;
cin >> u >> v;
add(u + n,v,inf);add(v,u + n,0);add(v + n,u,inf);add(u,v + n,0);
}
while(bfs())
{
dfs(s,inf);
}
print(s);
for(int i = 1;i <= n;i ++)
{
if(bz[i] != bz[i + n])cout << i << ' ';
}
return 0;
}