#include <bits/stdc++.h>
using namespace std;
const long long oo = 1000000000000000000ll;
const int N = 2020, M = 100100;
int i, j, k, n, m, ch, ff, En, s, t, x, y, v, nls;
int h[N], p[N], d[N], z[N], diss[N], dist[N];
long long c[N], Ls[N], Sum[N][N], Num[N][N], f[N][N][2];
struct edge {
  int s, n, v;
} E[M << 1];
struct cc {
  long long x;
  int y;
} QA[N][2], QB[N][2];
void R(int &x) {
  ff = x = 0;
  ch = getchar();
  while (ch < '0' || '9' < ch) {
    if (ch == '-') ff = 1;
    ch = getchar();
  }
  while ('0' <= ch && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  if (ff) x = -x;
}
void E_add(int x, int y, int v) {
  E[++En].s = y;
  E[En].v = v;
  E[En].n = h[x];
  h[x] = En;
  E[++En].s = x;
  E[En].v = v;
  E[En].n = h[y];
  h[y] = En;
}
int find(long long x) {
  int l = 1, r = n, mid;
  while (l < r) {
    mid = (l + r) >> 1;
    if (Ls[mid] == x) return mid;
    if (Ls[mid] < x)
      l = mid + 1;
    else
      r = mid - 1;
  }
  return l;
}
void spfa(int *dis, int x) {
  int i, j, k;
  memset(c, 60, sizeof c);
  memset(z, 0, sizeof z);
  i = 0;
  j = 1;
  d[1] = x;
  c[x] = 0;
  z[x] = 1;
  while (i != j) {
    if (++i > n) i = 1;
    int u = d[i];
    for (k = h[u]; k; k = E[k].n)
      if (c[u] + E[k].v < c[E[k].s]) {
        c[E[k].s] = c[u] + E[k].v;
        if (!z[E[k].s]) {
          z[E[k].s] = 1;
          if (++j > n) j = 1;
          d[j] = E[k].s;
        }
      }
    z[u] = 0;
  }
  nls = 0;
  for (i = 1; i <= n; i++) Ls[i] = c[i];
  sort(Ls + 1, Ls + n + 1);
  nls = 0;
  Ls[n + 1] = -1;
  for (i = 1; i <= n; i++)
    if (Ls[i] != Ls[i + 1]) Ls[++nls] = Ls[i];
  for (i = 1; i <= n; i++) dis[i] = find(c[i]);
}
void Up(cc *a, cc x) {
  if (x.x < a[0].x) {
    if (a[0].y < x.y) a[1] = a[0];
    a[0] = x;
    if (a[1].y >= a[0].y) a[1].x = 0, a[1].y = 0;
  } else {
    if (x.y < a[0].y && x.x < a[1].x) a[1] = x;
  }
}
int main() {
  memset(f, 190, sizeof f);
  R(n);
  R(m);
  R(s);
  R(t);
  for (i = 1; i <= n; i++) R(p[i]);
  for (i = 1; i <= m; i++) {
    R(x);
    R(y);
    R(v);
    E_add(x, y, v);
  }
  spfa(diss, s);
  spfa(dist, t);
  for (i = 1; i <= n; i++) {
    Sum[diss[i]][dist[i]] += p[i];
    Num[diss[i]][dist[i]]++;
  }
  for (i = n; i >= 0; i--)
    for (j = n; j >= 0; j--) {
      Sum[i][j] += Sum[i + 1][j] + Sum[i][j + 1] - Sum[i + 1][j + 1];
      Num[i][j] += Num[i + 1][j] + Num[i][j + 1] - Num[i + 1][j + 1];
    }
  for (i = 0; i <= n; i++)
    for (j = 0; j <= n; j++)
      if (!Num[i][j]) f[i][j][0] = f[i][j][1] = 0;
  for (i = n; i >= 1; i--)
    for (j = n; j >= 1; j--) {
      long long t;
      if (QB[j][0].y >= Num[i][j])
        t = QB[j][1].x;
      else
        t = QB[j][0].x;
      f[i][j][0] = Sum[i][j] - t;
      if (QA[i][0].y >= Num[i][j])
        t = QA[i][1].x;
      else
        t = QA[i][0].x;
      f[i][j][1] = Sum[i][j] - t;
      cc tt;
      tt.x = f[i][j][0];
      tt.y = Num[i][j];
      Up(QA[i], tt);
      tt.x = f[i][j][1];
      tt.y = Num[i][j];
      Up(QB[j], tt);
    }
  long long A = f[1][1][0], B = Sum[1][1] - A;
  if (A > B)
    puts("Break a heart");
  else {
    if (A == B)
      puts("Flowers");
    else
      puts("Cry");
  }
}
