#include <bits/stdc++.h>
using namespace std;
const long long N = 2005, M = 400005;
long long l, fi[N], V1[N][N], tot1, tot2, a[N], dis1[N], dis2[N], V2[N][N], n,
    m, s, t, ne[M], zz[M], sl[M], tot, f[N], g[N], dis[N], x, y, dp[2][N][N], z,
    val[N];
long long ef1(long long x) {
  long long l = 1, r = tot1;
  while (l < r) {
    long long mid = (l + r) / 2;
    if (a[mid] < x)
      l = mid + 1;
    else
      r = mid;
  }
  return l;
}
long long ef2(long long x) {
  long long l = 1, r = tot2;
  while (l < r) {
    long long mid = (l + r) / 2;
    if (a[mid] < x)
      l = mid + 1;
    else
      r = mid;
  }
  return l;
}
void jb(long long x, long long y, long long z) {
  ne[++tot] = fi[x];
  fi[x] = tot;
  zz[tot] = y;
  sl[tot] = z;
}
void up(long long x) {
  if (x == 1) return;
  if (dis[f[x]] < dis[f[x / 2]]) {
    swap(f[x], f[x / 2]);
    swap(g[f[x]], g[f[x / 2]]);
    up(x / 2);
  }
}
void down(long long x) {
  long long i = x;
  if (x * 2 <= l && dis[f[x]] > dis[f[x * 2]]) i = x * 2;
  if (x * 2 < l && dis[f[i]] > dis[f[x * 2 + 1]]) i = x * 2 + 1;
  if (i != x) {
    swap(f[x], f[i]);
    swap(g[f[x]], g[f[i]]);
    down(i);
  }
}
void solve(long long S, long long disq[]) {
  memset(dis, 0x3f3f3f3f, sizeof dis);
  dis[S] = 0;
  for (long long i = 1; i <= n; i++) f[i] = g[i] = i;
  l = n;
  for (long long i = n; i; i--) down(i);
  for (long long i = 1; i <= n; i++) {
    long long k = f[1];
    f[1] = f[l--];
    g[f[1]] = 1;
    down(1);
    for (long long j = fi[k]; j; j = ne[j])
      if (dis[zz[j]] > dis[k] + sl[j]) {
        dis[zz[j]] = dis[k] + sl[j];
        up(g[zz[j]]);
      }
  }
  for (long long i = 1; i <= n; i++) disq[i] = dis[i];
}
long long calc1(long long x1, long long y1, long long x2, long long y2) {
  return V2[x2][y2] - V2[x1 - 1][y2] - V2[x2][y1 - 1] + V2[x1 - 1][y1 - 1];
}
long long calc2(long long x1, long long y1, long long x2, long long y2) {
  return V1[x2][y2] - V1[x1 - 1][y2] - V1[x2][y1 - 1] + V1[x1 - 1][y1 - 1];
}
signed main() {
  scanf("%lld%lld", &n, &m);
  scanf("%lld%lld", &s, &t);
  for (long long i = 1; i <= n; i++) scanf("%lld", &val[i]);
  while (m--) {
    scanf("%lld%lld%lld", &x, &y, &z);
    jb(x, y, z);
    jb(y, x, z);
  }
  solve(s, dis1);
  solve(t, dis2);
  for (long long i = 1; i <= n; i++) a[i] = dis1[i];
  sort(a + 1, a + n + 1);
  tot1 = 1;
  for (long long i = 2; i <= n; i++)
    if (a[i] != a[tot1]) a[++tot1] = a[i];
  for (long long i = 1; i <= n; i++) dis1[i] = ef1(dis1[i]);
  for (long long i = 1; i <= n; i++) a[i] = dis2[i];
  sort(a + 1, a + n + 1);
  tot2 = 1;
  for (long long i = 2; i <= n; i++)
    if (a[i] != a[tot2]) a[++tot2] = a[i];
  for (long long i = 1; i <= n; i++) dis2[i] = ef2(dis2[i]);
  for (long long i = 1; i <= n; i++) V1[dis1[i]][dis2[i]] += val[i];
  for (long long i = 1; i <= n; i++) V2[dis1[i]][dis2[i]]++;
  for (long long i = 1; i <= tot1 + 1; i++)
    for (long long j = 1; j <= tot2 + 1; j++)
      V1[i][j] += V1[i - 1][j], V2[i][j] += V2[i - 1][j];
  for (long long i = 1; i <= tot1 + 1; i++)
    for (long long j = 1; j <= tot2 + 1; j++)
      V1[i][j] += V1[i][j - 1], V2[i][j] += V2[i][j - 1];
  for (long long i = tot1 + 1; i >= 1; i--)
    for (long long j = tot2 + 1; j >= 1; j--) {
      if (calc2(i, j, i, tot2))
        dp[0][i][j] =
            max(dp[0][i + 1][j], dp[1][i + 1][j]) + calc2(i, j, i, tot2);
      else
        dp[0][i][j] = dp[0][i + 1][j];
      if (calc1(i, j, tot1, j))
        dp[1][i][j] =
            min(dp[0][i][j + 1], dp[1][i][j + 1]) - calc2(i, j, tot1, j);
      else
        dp[1][i][j] = dp[1][i][j + 1];
    }
  if (dp[0][1][1] > 0)
    puts("Break a heart");
  else if (dp[0][1][1] == 0)
    puts("Flowers");
  else
    puts("Cry");
  return 0;
}
