#include <bits/stdc++.h>
using namespace std;
template <typename A, typename B>
inline void chmin(A &a, B b) {
  if (a > b) a = b;
}
template <typename A, typename B>
inline void chmax(A &a, B b) {
  if (a < b) a = b;
}
const long long INF = 1001001001001001001ll;
long long N, M;
long long S, T;
long long P[2222];
vector<pair<long long, long long>> G[2222];
vector<long long> calc(long long s) {
  vector<long long> dist(N, INF);
  dist[s] = 0;
  priority_queue<pair<long long, long long>, vector<pair<long long, long long>>,
                 greater<pair<long long, long long>>>
      que;
  que.push(pair<long long, long long>(0, s));
  while (que.size()) {
    long long c, v;
    tie(c, v) = que.top();
    que.pop();
    if (dist[v] < c) continue;
    for (auto &e : G[v]) {
      if (e.second + c >= dist[e.first]) continue;
      dist[e.first] = e.second + c;
      que.push(pair<long long, long long>(dist[e.first], e.first));
    }
  }
  vector<long long> uku = dist;
  sort((uku).begin(), (uku).end());
  uku.erase(unique((uku).begin(), (uku).end()), uku.end());
  for (long long i = 0; i < (N); i++)
    dist[i] = lower_bound((uku).begin(), (uku).end(), dist[i]) - uku.begin();
  return dist;
}
long long dp[2222][2222][2];
long long cnt[2222][2222];
long long sum[2222][2222];
long long dfs(long long a, long long b, long long p) {
  long long &ret = dp[a][b][p];
  if (ret != INF) return ret;
  if (cnt[a][N] + cnt[N][b] - cnt[a][b] == N) return ret = 0;
  if (p == 0) {
    ret = dfs(a + 1, b, 0);
    if (cnt[a + 1][N] - cnt[a][N] - cnt[a + 1][b] + cnt[a][b])
      chmax(ret, dfs(a + 1, b, 1));
    ret += sum[a + 1][N] - sum[a][N] - sum[a + 1][b] + sum[a][b];
  } else {
    ret = dfs(a, b + 1, 1);
    if (cnt[N][b + 1] - cnt[N][b] - cnt[a][b + 1] + cnt[a][b])
      chmin(ret, dfs(a, b + 1, 0));
    ret -= sum[N][b + 1] - sum[N][b] - sum[a][b + 1] + sum[a][b];
  }
  return ret;
}
signed main() {
  scanf("%lld%lld", &N, &M);
  scanf("%lld%lld", &S, &T);
  S--;
  T--;
  for (long long i = 0; i < (N); i++) scanf("%lld", &P[i]);
  for (long long i = 0; i < (M); i++) {
    long long a, b, c;
    scanf("%lld%lld%lld", &a, &b, &c);
    a--;
    b--;
    G[a].push_back(pair<long long, long long>(b, c));
    G[b].push_back(pair<long long, long long>(a, c));
  }
  vector<long long> dS = calc(S);
  vector<long long> dT = calc(T);
  for (long long i = 0; i < (N); i++) {
    cnt[dS[i] + 1][dT[i] + 1]++;
    sum[dS[i] + 1][dT[i] + 1] += P[i];
  }
  for (long long i = 0; i < (N + 1); i++) {
    for (long long j = 0; j < (N + 1); j++) {
      cnt[i + 1][j] += cnt[i][j];
      cnt[i][j + 1] += cnt[i][j];
      cnt[i + 1][j + 1] -= cnt[i][j];
      sum[i + 1][j] += sum[i][j];
      sum[i][j + 1] += sum[i][j];
      sum[i + 1][j + 1] -= sum[i][j];
    }
  }
  fill_n(**dp, 2222 * 2222 * 2, INF);
  long long tmp = dfs(0, 0, 0);
  if (tmp > 0)
    cout << "Break a heart" << endl;
  else if (tmp < 0)
    cout << "Cry" << endl;
  else
    cout << "Flowers" << endl;
  return 0;
}
