#include <bits/stdc++.h>
using namespace std;
long long d[2020][2];
long long dd[2020][2];
long long p[2020];
vector<pair<int, long long> > g[2020];
vector<int> cs[2];
long long dp[2020][2020][2];
int r[2020][2];
long long best1[2020];
long long best2[2020];
int n, m;
int valid(int a, int b) {
  if (a > 0 && a < n) {
    if (dd[a - 1][0] == dd[a][0]) return 0;
  }
  if (b > 0 && b < n) {
    if (dd[b - 1][1] == dd[b][1]) return 0;
  }
  return 1;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  int s, t;
  cin >> s >> t;
  for (int i = 1; i <= n; i++) {
    cin >> p[i];
  }
  for (int i = 0; i < m; i++) {
    int a, b;
    long long c;
    cin >> a >> b >> c;
    g[a].push_back({b, c});
    g[b].push_back({a, c});
  }
  for (int i = 0; i < 2; i++) {
    priority_queue<pair<long long, int> > dij;
    if (i == 0)
      dij.push({-1, s});
    else
      dij.push({-1, t});
    while (!dij.empty()) {
      auto x = dij.top();
      dij.pop();
      if (d[x.second][i]) continue;
      r[x.second][i] = (int)cs[i].size();
      dd[(int)cs[i].size()][i] = -x.first;
      cs[i].push_back(x.second);
      d[x.second][i] = -x.first;
      for (auto nx : g[x.second]) {
        dij.push({x.first - nx.second, nx.first});
      }
    }
  }
  for (int i = n - 1; i >= 0; i--) {
    for (int ii = n - 1; ii >= 0; ii--) {
      if (valid(i, ii)) {
        long long su = 0;
        int f = 0;
        for (int j = i + 1; j <= n; j++) {
          if (r[cs[0][j - 1]][1] >= ii) {
            best1[ii] += p[cs[0][j - 1]];
            su += p[cs[0][j - 1]];
            f = 1;
          }
          if (valid(j, ii)) {
            if (f) {
              best1[ii] = max(best1[ii], su - dp[j][ii][1]);
            }
            break;
          }
        }
        dp[i][ii][0] = best1[ii];
        su = 0;
        f = 0;
        for (int j = ii + 1; j <= n; j++) {
          if (r[cs[1][j - 1]][0] >= i) {
            best2[i] += p[cs[1][j - 1]];
            su += p[cs[1][j - 1]];
            f = 1;
          }
          if (valid(i, j)) {
            if (f) {
              best2[i] = max(best2[i], su - dp[i][j][0]);
            }
            break;
          }
        }
        dp[i][ii][1] = best2[i];
      }
    }
  }
  if (dp[0][0][0] > 0) {
    cout << "Break a heart" << endl;
  } else if (dp[0][0][0] == 0) {
    cout << "Flowers" << endl;
  } else {
    cout << "Cry" << endl;
  }
}
