#include <bits/stdc++.h>
using namespace std;
const long long inf = 1ll << 61;
const int maxn = 2050;
const int maxm = 100005;
long long dist[maxn], sum[maxn][maxn], ha[maxn], dp[maxn][maxn][2],
    best[maxn][2];
int cnt[maxn][maxn], hashdist[maxn][2], at[maxn][2];
bool vis[maxn];
int n, m, s, t, p[maxn];
int tot = 0, V[maxm << 1], N[maxm << 1], C[maxm << 1], F[maxn];
void add(int a, int b, int c) {
  ++tot, V[tot] = b, C[tot] = c, N[tot] = F[a], F[a] = tot;
}
void getdist(int st, int k) {
  for (int i = 1; i <= n; i++) dist[i] = inf;
  dist[st] = 0;
  memset(vis, 0, sizeof vis);
  for (int i = 1; i <= n; i++) {
    int cho = 0;
    for (int j = 1; j <= n; j++)
      if (!vis[j]) {
        if (!cho || dist[j] < dist[cho]) cho = j;
      }
    if (!cho || dist[cho] == inf) break;
    vis[cho] = 1;
    for (int p = F[cho]; p > 0; p = N[p])
      dist[V[p]] = min(dist[V[p]], dist[cho] + C[p]);
  }
  for (int i = 1; i <= n; i++) ha[i] = dist[i];
  sort(ha + 1, ha + 1 + n);
  int nh = unique(ha + 1, ha + 1 + n) - ha - 1;
  for (int i = 1; i <= n; i++)
    hashdist[i][k] = lower_bound(ha + 1, ha + 1 + nh, dist[i]) - ha;
}
int main() {
  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++) {
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    add(a, b, c), add(b, a, c);
  }
  getdist(s, 0);
  getdist(t, 1);
  memset(sum, 0, sizeof sum);
  memset(cnt, 0, sizeof cnt);
  for (int i = 1; i <= n; i++) {
    sum[hashdist[i][0]][hashdist[i][1]] += p[i];
    cnt[hashdist[i][0]][hashdist[i][1]]++;
  }
  for (int i = n; i > 0; i--)
    for (int j = n; j > 0; j--) {
      sum[i][j] = sum[i + 1][j] + sum[i][j + 1] - sum[i + 1][j + 1] + sum[i][j];
      cnt[i][j] = cnt[i + 1][j] + cnt[i][j + 1] - cnt[i + 1][j + 1] + cnt[i][j];
    }
  for (int i = 1; i <= n; i++)
    at[i][0] = at[i][1] = n + 1, best[i][0] = best[i][1] = 0;
  memset(dp, 0, sizeof dp);
  for (int i = n; i > 0; i--)
    for (int j = n; j > 0; j--) {
      while (cnt[at[j][0]][j] < cnt[i][j]) {
        best[j][0] = min(best[j][0], dp[at[j][0]][j][1]);
        at[j][0]--;
      }
      while (cnt[i][at[i][1]] < cnt[i][j]) {
        best[i][1] = min(best[i][1], dp[i][at[i][1]][0]);
        at[i][1]--;
      }
      dp[i][j][0] = sum[i][j] - best[j][0];
      dp[i][j][1] = sum[i][j] - best[i][1];
    }
  long long fi = dp[1][1][0], se = sum[1][1] - dp[1][1][0];
  if (fi > se)
    printf("Break a heart\n");
  else if (fi == se)
    printf("Flowers\n");
  else
    printf("Cry\n");
  return 0;
}
