#include <bits/stdc++.h>
using namespace std;
const int N = 2005, M = 100005;
inline int read() {
  int s = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) s = s * 10 + ch - '0', ch = getchar();
  return s * f;
}
const long long inf = 1e18;
int n, m, s, t;
int p[N];
vector<pair<int, int> > G[N];
vector<long long> d1, d2;
int vis[N];
long long b[N];
int cnt[N][N];
long long sum[N][N];
long long f[N][N], g[N][N];
pair<pair<long long, int>, pair<long long, int> > mf[N], mg[N];
vector<long long> dij(int s) {
  vector<long long> dis(n + 1, inf);
  memset(vis, 0, sizeof(vis));
  priority_queue<pair<long long, int>, vector<pair<long long, int> >,
                 greater<pair<long long, int> > >
      q;
  dis[s] = 0;
  q.push({0, s});
  while (!q.empty()) {
    int u = q.top().second;
    q.pop();
    if (vis[u]) continue;
    vis[u] = 1;
    for (pair<int, int> p : G[u]) {
      int v = p.first;
      if (dis[v] > dis[u] + p.second) {
        dis[v] = dis[u] + p.second;
        q.push({dis[v], v});
      }
    }
  }
  int cnt = 0;
  for (int i = 1; i <= n; i++) b[++cnt] = dis[i];
  sort(b + 1, b + cnt + 1);
  cnt = unique(b + 1, b + cnt + 1) - b - 1;
  for (int i = 1; i <= n; i++)
    dis[i] = lower_bound(b + 1, b + cnt + 1, dis[i]) - b;
  return dis;
}
inline void update(pair<long long, int> x,
                   pair<pair<long long, int>, pair<long long, int> > &y) {
  if (x < y.first) swap(x, y.first);
  if (x.second == y.first.second) return;
  y.second = min(y.second, x);
}
int main() {
  n = read(), m = read(), s = read(), t = read();
  for (int i = 1; i <= n; i++) p[i] = read();
  for (int i = 1; i <= m; i++) {
    int u = read(), v = read(), w = read();
    G[u].push_back({v, w});
    G[v].push_back({u, w});
  }
  d1 = dij(s), d2 = dij(t);
  for (int i = 1; i <= n; i++) {
    cnt[d1[i]][d2[i]]++;
    sum[d1[i]][d2[i]] += p[i];
  }
  for (int i = n; i >= 1; i--)
    for (int j = n; j >= 1; j--) {
      cnt[i][j] += cnt[i + 1][j] + cnt[i][j + 1] - cnt[i + 1][j + 1];
      sum[i][j] += sum[i + 1][j] + sum[i][j + 1] - sum[i + 1][j + 1];
    }
  for (int i = n; i >= 1; i--)
    for (int j = n; j >= 1; j--) {
      if (cnt[i][j] == 0) continue;
      f[i][j] =
          sum[i][j] - (cnt[i][j] == mf[j].first.second ? mf[j].second.first
                                                       : mf[j].first.first);
      g[i][j] =
          sum[i][j] - (cnt[i][j] == mg[i].first.second ? mg[i].second.first
                                                       : mg[i].first.first);
      update({f[i][j], cnt[i][j]}, mg[i]);
      update({g[i][j], cnt[i][j]}, mf[j]);
    }
  long long x = f[1][1], y = sum[1][1] - x;
  if (x < y)
    puts("Cry");
  else if (x > y)
    puts("Break a heart");
  else
    puts("Flowers");
  return 0;
}
