#include <bits/stdc++.h>
using namespace std;
const long long inf = 0x3f3f3f3f3f3f3f3f;
const long long N = 2000;
long long n, m, a, b;
long long v[N + 1];
vector<pair<long long, long long> > nei[N + 1];
long long dis1[N + 1], dis2[N + 1];
bool vis[N + 1];
void dijkstra(long long x, long long dis[]) {
  for (long long i = 1; i <= n; i++) dis[i] = inf;
  dis[x] = 0;
  memset(vis, 0, sizeof(vis));
  while (true) {
    pair<long long, long long> mn(inf, 0);
    for (long long j = 1; j <= n; j++)
      if (!vis[j]) mn = min(mn, make_pair(dis[j], j));
    long long y = mn.second;
    if (!y) break;
    vis[y] = true;
    for (long long j = 0; j < nei[y].size(); j++) {
      long long z = nei[y][j].first, len = nei[y][j].second;
      dis[z] = min(dis[z], dis[y] + len);
    }
  }
}
vector<long long> nums1, nums2;
vector<long long> hav1[N + 1], hav2[N + 1];
void discrete(vector<long long> &nums, long long dis[],
              vector<long long> hav[]) {
  nums.push_back(-1);
  for (long long i = 1; i <= n; i++) nums.push_back(dis[i]);
  sort(nums.begin(), nums.end());
  nums.resize(unique(nums.begin(), nums.end()) - nums.begin());
  for (long long i = 1; i <= n; i++)
    hav[dis[i] = lower_bound(nums.begin(), nums.end(), dis[i]) - nums.begin()]
        .push_back(i);
}
long long Cnt1[N + 1][N + 1], Sum1[N + 1][N + 1], Cnt2[N + 1][N + 1];
long long now1[N + 1], now2[N + 1], mx1[N + 1], mn2[N + 1];
long long dp1[N + 1][N + 1], dp2[N + 1][N + 1];
signed main() {
  cin >> n >> m >> a >> b;
  long long sum = 0;
  for (long long i = 1; i <= n; i++) cin >> v[i], sum += v[i];
  while (m--) {
    long long x, y, z;
    cin >> x >> y >> z;
    nei[x].push_back(make_pair(y, z));
    nei[y].push_back(make_pair(x, z));
  }
  dijkstra(a, dis1);
  dijkstra(b, dis2);
  discrete(nums1, dis1, hav1);
  discrete(nums2, dis2, hav2);
  for (long long i = 1; i < nums1.size(); i++)
    for (long long j = 0; j < nums2.size(); j++) {
      Cnt1[i][j] = Cnt1[i - 1][j];
      Sum1[i][j] = Sum1[i - 1][j];
      for (long long k = 0; k < hav1[i].size(); k++) {
        bool ok = dis2[hav1[i][k]] > j;
        Cnt1[i][j] += ok;
        Sum1[i][j] += ok * v[hav1[i][k]];
      }
    }
  for (long long i = 1; i < nums2.size(); i++)
    for (long long j = 0; j < nums1.size(); j++) {
      Cnt2[i][j] = Cnt2[i - 1][j];
      for (long long k = 0; k < hav2[i].size(); k++)
        Cnt2[i][j] += dis1[hav2[i][k]] > j;
    }
  for (long long i = 0; i <= n; i++)
    now1[i] = nums1.size(), now2[i] = nums2.size(), mx1[i] = -inf, mn2[i] = inf;
  for (long long i = nums1.size() - 1; ~i; i--)
    for (long long j = nums2.size() - 1; ~j; j--) {
      while (now1[j] && Cnt1[now1[j] - 1][j] > Cnt1[i][j])
        now1[j]--, mx1[j] = max(mx1[j], dp2[now1[j]][j] + Sum1[now1[j]][j]);
      dp1[i][j] = mx1[j] > -inf ? mx1[j] - Sum1[i][j] : 0;
      while (now2[i] && Cnt2[now2[i] - 1][i] > Cnt2[j][i])
        now2[i]--, mn2[i] = min(mn2[i], dp1[i][now2[i]]);
      dp2[i][j] = mn2[i] < inf ? mn2[i] : 0;
    }
  long long ans = dp1[0][0];
  puts(ans < sum - ans    ? "Cry"
       : ans == sum - ans ? "Flowers"
                          : "Break a heart");
  return 0;
}
