#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
int n, m, num[2003][2003], hi[2003], rj[2003];
long long x[2003], y[2003], p[2003], sh[2003], f[2003][2003][2],
    sum[2003][2003], mx[2003][2003], mi[2003][2003];
int tot, fir[2003], nxt[100005 << 1], to[100005 << 1], val[100005 << 1];
inline void addE(int u, int v, int w) {
  nxt[++tot] = fir[u], fir[u] = tot, to[tot] = v, val[tot] = w;
}
void work(long long *now, int &lim) {
  for (int i = 1; i <= n; ++i) sh[++lim] = now[i];
  sort(sh + 1, sh + lim + 1);
  lim = unique(sh + 1, sh + lim + 1) - (sh + 1);
  for (int i = 1; i <= n; ++i)
    now[i] = lower_bound(sh + 1, sh + lim + 1, now[i]) - sh;
}
void Dijkstra(int s, long long *dis) {
  for (int i = 1; i <= n; ++i) dis[i] = INF;
  priority_queue<pair<long long, int>, vector<pair<long long, int> >,
                 greater<pair<long long, int> > >
      q;
  q.push(make_pair(dis[s] = 0, s));
  while (!q.empty()) {
    int u = q.top().second;
    q.pop();
    for (int i = fir[u], v; i; i = nxt[i]) {
      v = to[i];
      if (dis[v] <= dis[u] + val[i]) continue;
      q.push(make_pair(dis[v] = dis[u] + val[i], v));
    }
  }
}
inline int getsz(int a, int aa, int b, int bb) {
  return num[aa][bb] - num[a][bb] - num[aa][b] + num[a][b];
}
int main() {
  int a, b;
  cin >> n >> m >> a >> b;
  for (int i = 1; i <= n; ++i) scanf("%lld", p + i);
  for (int i = 1, u, v, w; i <= m; ++i)
    scanf("%d%d%d", &u, &v, &w), addE(u, v, w), addE(v, u, w);
  int w = 0, h = 0;
  Dijkstra(a, x), work(x, h);
  Dijkstra(b, y), work(y, w);
  for (int i = 1; i <= n; ++i) sum[x[i]][y[i]] += p[i], ++num[x[i]][y[i]];
  for (int i = 1; i <= h + 1; ++i)
    for (int j = 1; j <= w + 1; ++j) {
      sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
      num[i][j] += num[i - 1][j] + num[i][j - 1] - num[i - 1][j - 1];
    }
  memset(hi, -1, sizeof hi);
  memset(rj, -1, sizeof rj);
  for (int i = h; i >= 0; --i)
    for (int j = w; j >= 0; --j) {
      if (getsz(i, i + 1, j, w)) hi[j] = i + 1;
      if (getsz(i, h, j, j + 1)) rj[i] = j + 1;
      if (~hi[j]) f[i][j][0] = mx[hi[j]][j] - (sum[i][w] - sum[i][j]);
      if (~rj[i]) f[i][j][1] = mi[i][rj[i]];
      mx[i][j] = max(hi[j] == -1 ? -INF : mx[hi[j]][j],
                     f[i][j][1] + (sum[i][w] - sum[i][j]));
      mi[i][j] = min(rj[i] == -1 ? INF : mi[i][rj[i]], f[i][j][0]);
    }
  long long ra = f[0][0][0], rb = sum[h][w] - ra;
  if (ra < rb) puts("Cry");
  if (ra == rb) puts("Flowers");
  if (ra > rb) puts("Break a heart");
  return 0;
}
