#include <bits/stdc++.h>
using namespace std;
long long f1, v, sum, d[2][2005], c[2], to[2005][2005], g[2005][2005][2],
    P[2005][2005], val[2005][2005], r[2005];
struct lsh {
  int pos;
  long long x;
} l[2005];
bool vst[2005][2005][2];
inline bool cmp(lsh aa, lsh bb) { return aa.x < bb.x; }
int s, t, i, j, cnt, n, m, nxt[2005][2005][2], p[2005];
void solve(long long* f, int fm) {
  int i, j, now;
  bool vst[2005];
  memset(vst, 0, sizeof(vst));
  for (i = 0; i <= n; ++i) {
    f[i] = 1e15;
  }
  f[fm] = 0;
  for (i = 1; i <= n; ++i) {
    now = 0;
    for (j = 1; j <= n; ++j)
      if (!vst[j] && f[j] < f[now]) now = j;
    vst[now] = 1;
    for (j = 1; j <= n; ++j)
      if (!vst[j]) f[j] = min(f[j], f[now] + to[now][j]);
  }
  for (i = 1; i <= n; ++i) l[i].pos = i, l[i].x = f[i];
  sort(l + 1, l + n + 1, cmp);
  cnt = 0;
  l[0].x = -1;
  for (i = 1; i <= n; ++i) f[l[i].pos] = (cnt += (l[i].x != l[i - 1].x));
}
long long dfs(int x, int y, int p) {
  if (x == c[0] || y == c[1]) return 0;
  if (vst[x][y][p]) return g[x][y][p];
  vst[x][y][p] = 1;
  if (p) {
    return g[x][y][p] =
               min(dfs(x, nxt[x][y][p], p), dfs(x, nxt[x][y][p], p ^ 1));
  } else {
    return g[x][y][p] =
               max(dfs(nxt[x][y][p], y, p), dfs(nxt[x][y][p], y, p ^ 1)) +
               val[x][y];
  }
}
int x, y;
int main() {
  cin >> n >> m >> s >> t;
  for (i = 1; i <= n; ++i) cin >> p[i], sum += p[i];
  memset(to, 0x3f, sizeof(to));
  for (i = 1; i <= m; ++i) {
    cin >> x >> y >> v;
    to[x][y] = to[y][x] = min(to[x][y], v);
  }
  solve(d[0], s);
  c[0] = cnt;
  solve(d[1], t);
  c[1] = cnt;
  for (i = 1; i <= n; ++i) P[d[0][i]][d[1][i]] += p[i] + 1000000005;
  for (i = 0; i <= c[1]; ++i) r[i] = c[1];
  for (i = c[0] - 1; ~i; --i) {
    for (j = 0; j < c[1]; ++j)
      if (P[i + 1][j + 1]) r[j] = j + 1;
    for (j = c[1] - 1; ~j; --j) r[j] = min(r[j], r[j + 1]), nxt[i][j][1] = r[j];
  }
  for (i = 0; i <= c[0]; ++i) r[i] = c[0];
  for (i = c[1] - 1; ~i; --i) {
    for (j = 0; j < c[0]; ++j)
      if (P[j + 1][i + 1]) r[j] = j + 1;
    for (j = c[0] - 1; ~j; --j) r[j] = min(r[j], r[j + 1]), nxt[j][i][0] = r[j];
  }
  for (i = 1; i <= n; ++i) P[d[0][i]][d[1][i]] -= 1000000005;
  for (i = c[0]; i; --i)
    for (j = c[1]; j; --j)
      P[i][j] += P[i + 1][j] + P[i][j + 1] - P[i + 1][j + 1];
  for (i = 0; i < c[0]; ++i)
    for (j = 0; j < c[1]; ++j)
      val[i][j] = P[i + 1][j + 1] - P[nxt[i][j][0] + 1][j + 1];
  f1 = dfs(0, 0, 0);
  if (f1 > sum - f1)
    cout << "Break a heart";
  else if (f1 == sum - f1)
    cout << "Flowers";
  else
    cout << "Cry";
}
