#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <map>
#include <cmath>
using namespace std;

int main() {
    int n,d;
    while (cin >> n >> d) {
        if (n == 0 && d == 0) break;

        vector<int> missiles[110];
        vector<pair<int, int> > potentials; // (potential, idx)

        for (int i=0; i<n; ++i) {
            int m; cin >> m;
            int sum = 0;
            for (int j=0; j<m; ++j) {
                int c; cin >> c;
                missiles[i].push_back(c);
                sum += c;
            }
            potentials.push_back(make_pair(sum, i));
        }

        // ????????????????????????????????????
        if (n == 1) {
            cout << "Yes" << endl;
            continue;
        }

        // ????????¶?????§?????¶???????????????????????´???????????§??????
        vector<pair<int,int> > tmp = potentials;
        sort(tmp.begin(), tmp.end()); // ??????
        if (tmp.back().first - tmp.front().first > d) {
            cout << "No" << endl;
            continue;
        }

        // ??????2??\??????????????§-????°?<=d?????¶?????§????¬?????§?
        bool success = false;
        while (1) {
            // ???????????¶????????§??????
            // ?????¶??????????????????????????????????????§po???0???????´????????????????????????§??¨??¨???????????????
            bool ok = false;
            for (int i=0; i<n; ++i) if (potentials[i].first == 0) {
                ok = true;
                break;
            }
            if (ok) {
                success = true;
                break;
            }
            vector<pair<int,int> > tmp = potentials;
            sort(tmp.rbegin(), tmp.rend()); // ??????
            pair<int,int> max1_po = tmp[0];
            pair<int,int> max2_po = tmp[1];
            pair<int,int> min_po = tmp.back();

            /*
            printf("max1_po: (%d,%d)\n", max1_po.first, max1_po.second);
            printf("max2_po: (%d,%d)\n", max2_po.first, max2_po.second);
            printf("min_po: (%d,%d)\n", min_po.first, min_po.second);

            for (int i=0; i<n; ++i) {
                printf("potentials[%d]: (%d,%d)\n",i,potentials[i].first, potentials[i].second);
            }
            cout << endl;
            */

            // ????????????
            bool f = false;
            for (int i=0; i<n; ++i) if (missiles[i].size() > 0) {
                if (max1_po.second == i) {
                    // ?????§??????????????????
                    if (max2_po.first - min(potentials[i].first - missiles[i].back(), min_po.first) <= d) {
                        potentials[i] = make_pair(potentials[i].first - missiles[i].back(), i);
                        missiles[i].pop_back();
                        f = true;
                        break;
                    }
                } else {
                    // ????????\?????????????????????
                    if (max1_po.first - min(potentials[i].first - missiles[i].back(), min_po.first) <= d) {
                        potentials[i] = make_pair(potentials[i].first - missiles[i].back(), i);
                        missiles[i].pop_back();
                        f = true;
                        break;
                    }
                }
            }
            if (!f) break; // ???????????\??????????????????????????£???
        }
        cout << (success ? "Yes" : "No") << endl;
    }

    return 0;
}