#include <bits/stdc++.h>
using namespace std;
  

#define F first
#define S second
#define pb push_back
#define all(v) v.begin(),v.end()
#define sz(a) (int)a.size()
#define mod 1000000007
#define dbg(a) cout<<#a<<" = "<<a<<endl
#define dbg2(a,b) cout<<#a<<" = "<<a<<", "<<#b<<" = "<<b<<endl
#define dbg3(a,b,c) cout<<#a<<" = "<<a<<", "<<#b<<" = "<<b<<", "<<#c<<" = "<<c<<endl
#define dbg4(a,b,c,d) cout<<#a<<" = "<<a<<", "<<#b<<" = "<<b<<", "<<#c<<" = "<<c<<", "<<#d<<" = "<<d<<endl
#define ll long long
#define ld long double
#define pii pair<int,int>
#define vi vector<int>

const int nn = 1e3+5;
int par[nn], taken[nn];

int find(int u){
    if(par[u]==u) return u;
    par[u] = find(par[u]);
    return par[u];
}

void unify(int u,int v){
    u = find(u);
    v = find(v);
    if(u!=v) par[u]=v;
}

void solve()
{
    int n,m,q;cin>>n>>m>>q;
    int a[q],b[q],c[q];
    for(int i=0;i<n;i++){
        par[i]=i;
    }
    for(int i=0;i<q;i++){
        cin>>a[i]>>b[i]>>c[i];
        if(c[i]==0) unify(a[i], b[i]);
    }
    for(int i=0;i<q;i++){
        if(c[i]==0) continue;
        int u=find(a[i]), v=find(b[i]);
        if(u==v){
            cout<<"No\n";
            return;
        }
        taken[u] = taken[v] = 1;
    }
    int cnt=0, tot=0;
    for(int i=0;i<n;i++){
        int u=i;
        if(par[u]!=u) m--;
        else{
            if(taken[u]) cnt++;
            tot++;
        }
    }
    if(cnt==2) cnt++;
    // dbg3(cnt,m,tot);
    if(cnt<=m && m<= 1ll*tot*(tot-1)/2) cout<<"Yes\n";
    else cout<<"No\n";
}
 

int main()
{   
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
    cout << fixed << setprecision(13);
    clock_t beg=clock();
    int t = 1; 
    // cin>>t;
    // n = t;
    while(t--){
        // cout << "Case #" << n-t << ": ";
        solve();
    }
    //
    clock_t end=clock();
    fprintf(stderr, "%lf sec\n", (double)(end-beg)/(CLOCKS_PER_SEC));
    return 0;
}