#include <bits/stdc++.h>
const long long inf = (long long)1e18;
using namespace std;
typedef int arr32[2010];
typedef long long arr64[2010];
arr32 vis, e[2010], ina, inb, a, b, pos, p, fn;
arr64 da, db;
arr64 f[2010], g[2010], tot[2010], ntot;
long long *cmp_arr;
int n, m, s, t, x, y, z;
bool cmp(const int &a, const int &b) { return cmp_arr[a] < cmp_arr[b]; }
void get_rank(int *a, long long *b) {
  cmp_arr = b;
  for (int i = 1; i <= n; ++i) a[i] = i;
  sort(a + 1, a + n + 1, cmp);
}
void get_dist(int s, long long *d) {
  memset(vis, 0, sizeof(vis));
  for (int i = 1; i <= n; ++i) d[i] = i == s ? 0 : inf;
  for (int i = 1; i <= n; ++i) {
    int k = 0;
    for (int j = 1; j <= n; ++j)
      if (vis[j] == false)
        if (k == 0 || d[j] < d[k]) k = j;
    vis[k] = true;
    for (int j = 1; j <= n; ++j)
      if (e[k][j] != -1 && d[k] + e[k][j] < d[j]) d[j] = d[k] + e[k][j];
  }
}
int main() {
  memset(e, -1, sizeof(e));
  scanf("%d %d", &n, &m);
  scanf("%d %d", &s, &t);
  for (int i = 1; i <= n; ++i) scanf("%d", p + i);
  for (int i = 1; i <= m; ++i) {
    scanf("%d %d %d", &x, &y, &z);
    if (e[x][y] == -1 || e[x][y] > z) e[x][y] = e[y][x] = z;
  }
  get_dist(s, da);
  get_dist(t, db);
  get_rank(a, da);
  get_rank(b, db);
  for (int i = 0; i <= n; ++i) {
    ina[a[i]] = i;
    inb[b[i]] = i;
    pos[i] = n;
  }
  for (int i = 0; i <= n; ++i)
    for (int j = 1; j <= n; ++j) {
      int v = inb[a[j]] <= i ? 0 : p[a[j]];
      tot[i][j] = tot[i][j - 1] + v;
    }
  for (int i = n; i >= 0; --i) {
    int nbest = 0;
    int npos = n;
    for (int j = 1; j <= n; ++j) {
      int v = ina[b[j]] <= i ? 0 : p[b[j]];
      ntot[j] = ntot[j - 1] + v;
    }
    for (int j = n; j >= 0; --j) {
      f[i][j] = g[fn[j]][j] + tot[j][fn[j]] - tot[j][i];
      g[i][j] = f[i][nbest] - ntot[nbest] + ntot[j];
      if (nbest == 0) g[i][j] = 0;
      if (fn[j] == 0) f[i][j] = 0;
      if (j > 0 && ina[b[j]] > i) {
        while (npos >= j) {
          if ((npos == n || db[b[npos]] != db[b[npos + 1]]))
            if (nbest == 0 ||
                f[i][npos] - ntot[npos] < f[i][nbest] - ntot[nbest])
              nbest = npos;
          --npos;
        }
      }
    }
    for (int j = n; j >= 0; --j) {
      if (i > 0 && inb[a[i]] > j) {
        while (pos[j] >= i) {
          if ((pos[j] == n || da[a[pos[j]]] != da[a[pos[j] + 1]]))
            if (fn[j] == 0 ||
                g[pos[j]][j] + tot[j][pos[j]] > g[fn[j]][j] + tot[j][fn[j]])
              fn[j] = pos[j];
          --pos[j];
        }
      }
    }
  }
  if (f[0][0] > 0)
    printf("Break a heart");
  else if (f[0][0] < 0)
    printf("Cry");
  else if (f[0][0] == 0)
    printf("Flowers");
}
