#include<bits/stdc++.h>

using namespace std;

#define int long long 
#define F first 
#define S second 
#define pii pair<int,int> 
#define mpr make_pair

typedef long long ll;

const int maxn = 1e5+10;
const int mod = 998244353;
const int inf = 1e9+10;

int n, k, m, q;
int a[maxn];
vector<pii> edge;
vector<int> g[maxn];
bool mark[maxn];
int comp[maxn];

void dfs(int v, int k)
{
	comp[v] = k;
	mark[v] = 1;
	for(auto u : g[v])
		if(!mark[u]) dfs(u,k);
}

signed main()
{
//	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);	
	
	cin>> n >> m >> q;
	bool is_cyc = 0;
	for(int i = 1, a, b, c; i <= q; i++)
	{
		cin>> a >> b >> c;
		a++; b++;
		if(c == 0)
		{
			g[a].push_back(b);
			g[b].push_back(a);
		}
		else 
		{
			is_cyc = 1;
			edge.push_back({a,b});	
		}
	}	
	
	for(int i = 1; i <= n; i++) 
		if(!mark[i]) dfs(i,++k);
	
	for(auto e : edge)
	{
		int u = e.F, v = e.S;
		if(comp[u] == comp[v]) return cout<<"No", 0;
	}
	
	if(k <= 2 && is_cyc) return cout<<"No", 0;
	
	int L = n-1 + is_cyc, R = k * (k-1) / 2 + n-k;	
	if(m >= L && m <= R) cout<<"Yes";
	else cout<<"No";
}















