def bellman_ford(n, edges, start, initial_money):
    dist = [-float('inf')] * n 
    dist[start] = initial_money 
    

    for _ in range(n - 1):
        for u, v, rate, commission in edges:
            if dist[u] > 0:
                new_amount = (dist[u] - commission) * rate
                if new_amount > dist[v]:
                    dist[v] = new_amount
    

    for u, v, rate, commission in edges:
        if dist[u] > 0:
            new_amount = (dist[u] - commission) * rate
            if new_amount > dist[v]:
                return True  
    
    return False 

n, m, s, v = map(float, input().split())
edges = []
n = int(n)
m = int(m)
s = int(s)

for _ in range(m):
    a, b, rab, cab, rba, cba = map(float, input().split())
    a, b = int(a) - 1, int(b) - 1 
    edges.append((a, b, rab, cab))
    edges.append((b, a, rba, cba))

if bellman_ford(n, edges, s - 1, v):
    print("YES")
else:
    print("NO")