#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define ms(x) memset(x,0,sizeof(x))
#define mf(x) memset(x,inf,sizeof(x))
using namespace std;
const int N = 1041;
const int M = 205;
int n, m, k, l;
int dp[N][M];
struct node{
int a, b, c;
}q[N];
int dfs(int now, int tpans){
if(now>=n) return tpans-100;
if(dp[now][tpans]!=inf) return dp[now][tpans];
int ans = tpans-100;
if(now%2==0){
int tmp = -100;
if(q[now].a > 0){
int _ans = min(100, ans + q[now].a);
tmp = max(dfs(now+1, _ans+100), tmp);
}
if(q[now].b > 0){
int _ans = max(-100, ans - q[now].b);
tmp = max(dfs(now+1, _ans+100), tmp);
}
if(q[now].c > 0){
tmp = max(tmp, dfs(now+1, -ans + 100));
}
dp[now][tpans] = tmp;
return tmp;
}
else{
int tmp = 100;
if(q[now].a > 0){
int _ans = min(100, ans + q[now].a);
tmp = min(dfs(now+1, _ans+100), tmp);
}
if(q[now].b > 0){
int _ans = max(-100, ans - q[now].b);
tmp = min(dfs(now+1, _ans+100), tmp);
}
if(q[now].c > 0){
tmp = min(tmp, dfs(now+1, -ans + 100));
}
dp[now][tpans] = tmp;
return tmp;
}
}
int main() {
while(scanf("%d%d%d%d",&n,&m,&k,&l)!=EOF) {
mf(dp);
for(int i=0;i<n;i++){
scanf("%d%d%d",&q[i].a,&q[i].b,&q[i].c);
}
int ans = dfs(0, m+100);
//cout<<ans<<endl;
if(ans >= k){
puts("Good Ending");
}
else if(ans <= l ){
puts("Bad Ending");
}
else puts("Normal Ending");
}
return 0;
}