#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int INF = 0xfffffff;
int n, m ;
int start , ender;
queue<int>q;
typedef struct
{
int y;
int w;
}edge;
vector<edge>data[1000];
int dist[1000];
int cnt[1000];
int vis[1000];
void init()
{
for(int i = 0; i < 1000; i ++)
{
dist[i] = INF;
cnt[i] = 0;
vis[i] = 0;
}
}
void input()
{
int x , y , w;
edge temp;
for(int i = 0; i < m; i ++){
scanf("%d%d%d",&x,&y,&w);
temp.y = y;
temp.w = w;
data[x].push_back(temp);
temp.y = x;
temp.w = w;
data[y].push_back(temp);
}
}
int spfa()
{
q.push(start);
vis[start] = 1;
dist[start] = 0;
cnt[start] ++;
int u ;
while(!q.empty()){
u = q.front();
q.pop();
vis[u] = 0;
for(int i = 0; i < (int)data[u].size(); i ++)
{
if(dist[data[u][i].y] > dist[u] + data[u][i].w){
dist[data[u][i].y] = dist[u] + data[u][i].w;
if(vis[data[u][i].y] == 0)
{
if(cnt[data[u][i].y] == n) return 1;
cnt[data[u][i].y] ++;
q.push(data[u][i].y);
vis[data[u][i].y] = 1;
}
}
}
}
return 0;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF){
for(int i = 0; i < 100; i ++)
data[i].clear();
init();
input();
scanf("%d%d",&start,&ender);
if(spfa())
printf("YES\n");
else
printf("no\n");
}
}