// Written by Gemini
#include <bits/stdc++.h>

using namespace std;

int n, k, mx;
vector<int> c;
vector<vector<int>> opts;
int dp[505][505];

void get_sums(int i, bitset<250005>& bs) {
    if (i == c.size()) return;
    bs |= (bs << c[i]);
    get_sums(i + 1, bs);
}

bool solve(int i, int sum) {
    if (sum > n) return false; 
    if (i == n) return (sum == n); 

    if (dp[i][sum] != -1) 
        return dp[i][sum];

    bool ok = false;
    for (int m : opts[i]) {
        if (solve(i + 1, sum + m)) {
            ok = true;
            break;
        }
    }

    return dp[i][sum] = ok;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    if (!(cin >> n >> k)) return 0;
    mx = n * k;

    opts.resize(n);
    memset(dp, -1, sizeof(dp));
    
    bitset<250005> bs;

    for (int i = 0; i < n; i++) {
        int l;
        cin >> l;
        
        c.clear();
        for (int j = 0; j < l; j++) {
            int x;
            cin >> x;
            if (x <= mx) {
                c.push_back(x);
            }
        }

        bs.reset();
        bs[0] = 1; 

        get_sums(0, bs);

        for (int m = 0; m <= n; m++) {
            if (bs[m * k]) {
                opts[i].push_back(m);
            }
        }
    }

    if (solve(0, 0)) {
        cout << "YES\n";
    } else {
        cout << "NO\n";
    }

    return 0;
}
