#include <bits/stdc++.h>
using namespace std;
namespace red {
inline long long read() {
  long long x = 0;
  char ch, f = 1;
  for (ch = getchar(); (ch < '0' || ch > '9') && ch != '-'; ch = getchar())
    ;
  if (ch == '-') f = 0, ch = getchar();
  while (ch >= '0' && ch <= '9') {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return f ? x : -x;
}
const long long N = 3e5 + 10, inf = 0x3f3f3f3f3f3f3f3f;
priority_queue<pair<long long, long long>, vector<pair<long long, long long> >,
               greater<pair<long long, long long> > >
    q;
long long n, m, ss, t, k, ret;
long long val[N];
long long head[N], cnt;
struct point {
  long long nxt, to, val;
  point() {}
  point(const long long &nxt, const long long &to, const long long &val)
      : nxt(nxt), to(to), val(val) {}
} a[N << 1];
inline void link(long long x, long long y, long long z) {
  a[++cnt] = (point){head[x], y, z};
  head[x] = cnt;
  a[++cnt] = (point){head[y], x, z};
  head[y] = cnt;
}
long long ds[N], dt[N], num[N], cs, ct;
bool vis[N];
long long c[2010][2010], s[2010][2010];
long long ns[2010][2010], nt[2010][2010];
long long f[2][2010][2010];
inline void spfa(long long st, long long *dis, long long &c) {
  for (long long i = 1; i <= n; ++i) dis[i] = inf, vis[i] = 0;
  dis[st] = 0;
  q.push(pair<long long, long long>(0, st));
  while (!q.empty()) {
    long long now = q.top().second;
    q.pop();
    if (vis[now]) continue;
    vis[now] = 1;
    for (long long i = head[now]; i; i = a[i].nxt) {
      long long t = a[i].to;
      if (dis[t] > dis[now] + a[i].val) {
        dis[t] = dis[now] + a[i].val;
        q.push(pair<long long, long long>(dis[t], t));
      }
    }
  }
  for (long long i = 1; i <= n; ++i) num[i] = dis[i];
  sort(num + 1, num + n + 1);
  c = unique(num + 1, num + n + 1) - (num + 1);
  for (long long i = 1; i <= n; ++i)
    dis[i] = lower_bound(num + 1, num + c + 1, dis[i]) - num;
}
inline void main() {
  n = read(), m = read(), ss = read(), t = read();
  for (long long i = 1; i <= n; ++i) val[i] = read();
  for (long long x, y, z, i = 1; i <= m; ++i) {
    x = read(), y = read(), z = read();
    link(x, y, z);
  }
  spfa(ss, ds, cs);
  spfa(t, dt, ct);
  for (long long i = 1; i <= n; ++i)
    ++c[ds[i]][dt[i]], s[ds[i]][dt[i]] += val[i];
  for (long long i = cs; i; --i) {
    for (long long j = ct; j; --j) {
      s[i][j] += s[i + 1][j] + s[i][j + 1] - s[i + 1][j + 1];
      ns[i][j] = min(i == cs ? cs : ns[i + 1][j], j == ct ? cs : ns[i][j + 1]);
      nt[i][j] = min(i == cs ? ct : nt[i + 1][j], j == ct ? ct : nt[i][j + 1]);
      if (c[i][j]) ns[i][j] = i, nt[i][j] = j;
      f[0][i][j] = s[i][j] - f[1][ns[i][j] + 1][j];
      f[1][i][j] = s[i][j] - f[0][i][nt[i][j] + 1];
      if (i == 1 && j == 1) continue;
      f[0][i][j] = min(f[0][i][j], f[0][i][j + 1]);
      f[1][i][j] = min(f[1][i][j], f[1][i + 1][j]);
    }
  }
  ret = s[1][1] - 2 * f[0][1][1];
  printf(ret < 0 ? "Break a heart" : (ret > 0 ? "Cry" : "Flowers"));
}
}  // namespace red
signed main() {
  red::main();
  return 0;
}
