#include <bits/stdc++.h>
using namespace std;
const int N = 2020, M = 1e5 + 10;
int n, m, s, t;
int p[N];
int final[N], nex[M * 2], to[M * 2], w[M * 2], tot;
void link(int x, int y, int W) {
  to[++tot] = y, nex[tot] = final[x], final[x] = tot;
  w[tot] = W;
}
long long ds[N], dt[N];
priority_queue<pair<long long, int> > q;
void dij(int s, long long *dis) {
  memset(dis, 127, sizeof ds);
  dis[s] = 0;
  q.push(make_pair(0, s));
  while (q.size()) {
    int x = q.top().second;
    long long v = -q.top().first;
    q.pop();
    if (dis[x] != v) continue;
    for (int i = final[x]; i; i = nex[i]) {
      int y = to[i];
      if (dis[y] > dis[x] + w[i]) {
        dis[y] = dis[x] + w[i];
        q.push(make_pair(-dis[y], y));
      }
    }
  }
  static long long tmp[N];
  memcpy(tmp, dis, sizeof tmp);
  tmp[0] = n;
  sort(tmp + 1, tmp + 1 + n);
  tmp[0] = unique(tmp + 1, tmp + 1 + n) - tmp - 1;
  for (int i = 1; i <= n; i++) {
    dis[i] = lower_bound(tmp + 1, tmp + 1 + tmp[0], dis[i]) - tmp;
  }
  dis[0] = tmp[0];
}
long long f[N][N][2], a[N][N];
int cnt[N][N], lasx[N][N], lasy[N][N];
long long prex[N][N], prey[N][N];
int main() {
  cin >> n >> m >> s >> t;
  for (int i = 1; i <= n; i++) scanf("%d", &p[i]);
  for (int i = 1; i <= m; i++) {
    int u, v, w;
    scanf("%d %d %d", &u, &v, &w);
    link(u, v, w);
    link(v, u, w);
  }
  dij(s, ds);
  dij(t, dt);
  for (int i = 1; i <= n; i++) a[ds[i]][dt[i]] += p[i], cnt[ds[i]][dt[i]]++;
  for (int i = ds[0]; i; i--) {
    for (int j = dt[0]; j; j--) {
      a[i][j] += a[i + 1][j];
      cnt[i][j] += cnt[i + 1][j];
    }
  }
  for (int i = ds[0]; i; i--) {
    for (int j = dt[0]; j; j--) {
      a[i][j] += a[i][j + 1];
      cnt[i][j] += cnt[i][j + 1];
    }
  }
  for (int x = ds[0]; x; x--) {
    for (int y = dt[0]; y; y--) {
      lasx[x][y] = lasx[x + 1][y];
      if (cnt[x][y] - cnt[x + 1][y]) lasx[x][y] = x + 1;
      lasy[x][y] = lasy[x][y + 1];
      if (cnt[x][y] - cnt[x][y + 1]) lasy[x][y] = y + 1;
      if (lasx[x][y])
        f[x][y][0] = a[x][y] + prex[lasx[x][y]][y];
      else
        f[x][y][0] = 1e18;
      if (lasy[x][y])
        f[x][y][1] = a[x][y] + prey[x][lasy[x][y]];
      else
        f[x][y][1] = 1e18;
      if (abs(f[x][y][1]) < 1e18)
        prex[x][y] = max(prex[x + 1][y], -f[x][y][1] - a[x][y]);
      if (abs(f[x][y][0]) < 1e18)
        prey[x][y] = max(prey[x][y + 1], -f[x][y][0] - a[x][y]);
    }
  }
  if (f[1][1][0] > 0) {
    cout << "Break a heart" << endl;
  } else if (f[1][1][0] == 0) {
    cout << "Flowers" << endl;
  } else
    cout << "Cry" << endl;
}
