#include <bits/stdc++.h>
using namespace std;
const long long inf = (long long)1e15;
int i, j, k, n, m, s, t, _, num;
int p[2010], g[2010 * 100], ff[2010], id[2][2010], ge[2][2010][2010],
    xia[2][2010][2010];
long long gg[2][2010], zhi[2][2010][2010], f[2010][2010][2], h[2010][2010][2];
vector<pair<int, int> > a[2010];
inline void bfs(int x, int _) {
  int l, r;
  g[l = r = 1] = x;
  gg[_][x] = 0;
  for (; l <= r; l++) {
    int A = g[l];
    ff[A] = 0;
    for (auto i : a[A]) {
      int B = i.first;
      if (gg[_][B] > gg[_][A] + i.second) {
        gg[_][B] = gg[_][A] + i.second;
        if (!ff[B]) ff[B] = 1, g[++r] = B;
      }
    }
  }
}
inline bool cc1(const int &A, const int &B) { return gg[_][A] < gg[_][B]; }
inline void pr() {
  memset(gg, 120, sizeof(gg));
  bfs(s, 0);
  bfs(t, 1);
  for (i = 1; i <= n; i++) id[0][i] = id[1][i] = i;
  for (_ = 0; _ <= 1; _++) sort(id[_] + 1, id[_] + n + 1, cc1);
  gg[0][0] = gg[1][0] = -1;
  for (_ = 0; _ <= 1; _++) {
    for (i = 0; i <= n; i++) {
      ++num;
      for (j = 1; j <= n; j++)
        if (gg[_ ^ 1][j] <= gg[_ ^ 1][id[_ ^ 1][i]]) ff[j] = num;
      for (j = 1; j <= n; j++) {
        int A = id[_][j];
        zhi[_][i][j] = zhi[_][i][j - 1];
        ge[_][i][j] = ge[_][i][j - 1];
        if (ff[A] != num) zhi[_][i][j] += p[A], ge[_][i][j]++;
      }
      xia[_][i][n + 1] = n + 1;
      for (j = n; j >= 0; j--) {
        xia[_][i][j] = xia[_][i][j + 1];
        if (j == n || ge[_][i][j] != ge[_][i][j + 1]) xia[_][i][j] = j;
      }
    }
  }
}
inline void work() {
  for (i = 0; i <= n; i++)
    for (j = 0; j <= n; j++)
      if (i != n && j != n) f[i][j][0] = -inf, f[i][j][1] = inf;
  for (i = n; i >= 0; i--)
    for (j = n; j >= 0; j--)
      for (_ = 0; _ <= 1; _++) {
        {
          int y = _ ^ 1;
          if (_) {
            int wei = xia[y][j][i];
            if (wei < n) f[i][j][_] = h[wei + 1][j][y] - zhi[y][j][i];
          } else {
            int wei = xia[y][i][j];
            if (wei < n) f[i][j][_] = h[i][wei + 1][y] + zhi[y][i][j];
          }
        }
        if (!_) {
          if (i == n)
            h[i][j][_] = zhi[_][j][i];
          else
            h[i][j][_] = max(h[i + 1][j][_], f[i][j][_] + zhi[_][j][i]);
        } else {
          if (j == n)
            h[i][j][_] = -zhi[_][i][j];
          else
            h[i][j][_] = min(h[i][j + 1][_], f[i][j][_] - zhi[_][i][j]);
        }
      }
  printf("%s\n", f[0][0][1] < 0   ? "Cry"
                 : f[0][0][1] > 0 ? "Break a heart"
                                  : "Flowers");
}
int main() {
  scanf("%d%d", &n, &m);
  scanf("%d%d", &s, &t);
  for (i = 1; i <= n; i++) scanf("%d", &p[i]);
  for (i = 1; i <= m; i++) {
    int x, y, z;
    scanf("%d%d%d", &x, &y, &z);
    a[x].push_back(make_pair(y, z));
    a[y].push_back(make_pair(x, z));
  }
  pr();
  work();
  return 0;
}
