#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>using namespace std;#define INF 0x3f3f3f3f#define N 51int dp[N][N][201], cnt[N][N][201], d[N];vector<int> g[N];int dfs(int x, int y, int sc) {if (cnt[x][y][sc + 100] != -1) {return dp[x][y][sc + 100];}cnt[x][y][sc + 100] = 1;if (g[x].empty() && g[y].empty()) {return dp[x][y][sc + 100] = -sc;} else {dp[x][y][sc + 100] = -INF;}for (int i = 0; i < (int) g[x].size(); i++) {int tmp = -dfs(g[x][i], y, sc + d[g[x][i]]);if (tmp > dp[x][y][sc + 100]) {dp[x][y][sc + 100] = tmp;cnt[x][y][sc + 100] = 1;} else if (tmp == dp[x][y][sc + 100]) {cnt[x][y][sc + 100]++;}}for (int i = 0; i < (int) g[y].size(); i++) {int tmp = -dfs(x, g[y][i], sc - d[g[y][i]]);if (tmp > dp[x][y][sc + 100]) {dp[x][y][sc + 100] = tmp;cnt[x][y][sc + 100] = 1;} else if (tmp == dp[x][y][sc + 100]) {cnt[x][y][sc + 100]++;}}return dp[x][y][sc + 100];}int main() {int n, m, x, y;while (scanf(" %d %d %d %d", &n, &m, &x, &y) == 4) {for (int i = 0; i < n; i++)scanf(" %d", &d[i]);while (m--) {int a, b;scanf(" %d %d", &a, &b);g[a].push_back(b);}memset(cnt, -1, sizeof(cnt));dfs(x, y, 1);printf("%d %dn", dp[x][y][101], cnt[x][y][101]);for (int i = 0; i < n; i++) {g[i].clear();}}return 0;}


