#include <bits/stdc++.h>
using namespace std;
int n, m, s, t, r, c, x[2020], y[2020], p[2020], nxt_up[2020][2020],
    nxt_le[2020][2020], cnt[2020][2020];
long long d[2020], e[2020], dp[2020][2020][2], up[2020][2020], le[2020][2020],
    a[2020][2020], val[2020][2020];
const long long inf = 1e18;
vector<pair<int, int> > adj[2020];
void dijkstra(int x) {
  for (int i = 1; i <= n; i++) d[i] = inf;
  d[x] = 0;
  priority_queue<pair<long long, int> > pq;
  pq.push(pair<long long, int>(0, x));
  while (!pq.empty()) {
    pair<long long, int> p = pq.top();
    pq.pop();
    x = p.second;
    long long y = -p.first;
    if (d[x] != y) continue;
    for (auto p : adj[x]) {
      int y = p.first, z = p.second;
      if (d[y] > d[x] + z) {
        d[y] = d[x] + z;
        pq.push(pair<long long, int>(-d[y], y));
      }
    }
  }
}
int main() {
  scanf("%d %d", &n, &m);
  scanf("%d %d", &s, &t);
  long long sum = 0;
  for (int i = 1; i <= n; i++) scanf("%d", &p[i]), sum += p[i];
  while (m--) {
    int u, v, w;
    scanf("%d %d %d", &u, &v, &w);
    adj[u].emplace_back(v, w);
    adj[v].emplace_back(u, w);
  }
  dijkstra(s);
  for (int i = 1; i <= n; i++) e[i] = d[i];
  sort(e + 1, e + n + 1);
  r = unique(e + 1, e + n + 1) - e - 1;
  for (int i = 1; i <= n; i++) x[i] = lower_bound(e + 1, e + r + 1, d[i]) - e;
  dijkstra(t);
  for (int i = 1; i <= n; i++) e[i] = d[i];
  sort(e + 1, e + n + 1);
  c = unique(e + 1, e + n + 1) - e - 1;
  for (int i = 1; i <= n; i++) y[i] = lower_bound(e + 1, e + c + 1, d[i]) - e;
  for (int i = 1; i <= n; i++) a[x[i]][y[i]] += p[i], cnt[x[i]][y[i]]++;
  for (int i = r; i; i--)
    for (int j = c; j; j--) {
      val[i][j] = a[i][j] + val[i + 1][j] + val[i][j + 1] - val[i + 1][j + 1];
      cnt[i][j] += cnt[i + 1][j] + cnt[i][j + 1] - cnt[i + 1][j + 1];
      if (cnt[i + 1][j] < cnt[i][j])
        nxt_le[i][j] = i + 1;
      else
        nxt_le[i][j] = nxt_le[i + 1][j];
      dp[i][j][0] = up[nxt_le[i][j]][j] + val[i][j];
      if (cnt[i][j + 1] < cnt[i][j])
        nxt_up[i][j] = j + 1;
      else
        nxt_up[i][j] = nxt_up[i][j + 1];
      dp[i][j][1] = le[i][nxt_up[i][j]];
      up[i][j] = max(up[i + 1][j], dp[i][j][1] - val[i][j]);
      le[i][j] = min(le[i][j + 1], dp[i][j][0]);
    }
  long long X = dp[1][1][0], Y = sum - X;
  if (X > Y)
    puts("Break a heart");
  else if (Y > X)
    puts("Cry");
  else
    puts("Flowers");
  return 0;
}
