#include <bits/stdc++.h>

using namespace std;

using ll = long long;

const double eps = 1e-10;
const int MOD = 1000000007;
const int INF = 1000000000;
const ll LINF = 1ll<<50;

template<typename T>
void printv(const vector<T>& s) {
  for(int i=0;i<(int)(s.size());++i) {
    cout << s[i];
    if(i == (int)(s.size())-1) cout << endl;
    else cout << " ";
  }
}

int main () {
  cin.tie(0);
  cout << fixed << setprecision(10);
  while(1) {
    int n, d; cin >> n >> d;
    if(n == 0 && d == 0) break;
    vector<int> m(n);
    vector<vector<int>> c(n);
    vector<int> su(n, 0);
    for(int i=0;i<n;++i) {
      cin >> m[i];
      for(int j=0;j<m[i];++j) {
        int tmp; cin >> tmp;
        c[i].push_back(tmp);
        su[i] += tmp;
      }
      reverse(c[i].begin(), c[i].end());
    }

    vector<vector<int>> rem(n);
    for(int i=0;i<n;++i) {
      rem[i].push_back(su[i]);
    }

    for(int i=0;i<n;++i) {
      for(int j=0;j<m[i];++j) {
        int sz = rem[i].size();
        rem[i].push_back(rem[i][sz-1] - c[i][j]);
      }
    }

    priority_queue<pair<int, pair<int, int>>> max1, max2;
    vector<int> v(n, 0);
    for(int i=0;i<n;++i) {
      max1.push({rem[i][v[i]], {i, v[i]}});
      v[i]++;
    }
    for(int i=0;i<n;++i) {
      if(v[i] < (int)(rem[i].size())) max2.push({rem[i][v[i]], {i, v[i]}});
      v[i]++;
    }

    vector<vector<bool>> sel1(n), sel2(n);
    for(int i=0;i<n;++i) {
      for(int j=0;j<m[i];++j) {
        sel1[i].push_back(false);
        sel2[i].push_back(false);
      }
    }

    // printv(su);

    while(!max1.empty()) {
      if(max2.empty()) {
        cout << "Yes" << endl;
        break;
      }
      if(max1.top().first == 0) {
        cout << "Yes" << endl;
        break;
      }
      int idx1 = max1.top().second.first;
      int vidx1 = max1.top().second.second;
      if(sel1[idx1][vidx1]) {
        max1.pop();
        continue;
      }
      int idx2 = max2.top().second.first;
      int vidx2 = max2.top().second.second;
      if(sel2[idx2][vidx2]) {
        max2.pop();
        continue;
      }

      // cout << "max1:" << max1.top().first << ":" << max1.top().second.first << ":" << max1.top().second.second << endl;
      // cout << "max2:" << max2.top().first << ":" << max2.top().second.first << ":" << max2.top().second.second << endl;

      if(max1.top().first - max2.top().first <= d) {
        int idx = max2.top().second.first;
        int vidx = max2.top().second.second;
        for(int i=vidx-1;i>=0;--i) {
          if(sel1[idx][i]) break;
          else sel1[idx][i] = true;
        }
        max1.push(max2.top());
        max2.pop();
        vidx++;
        if(vidx < (int)(rem[idx].size())) {
          max2.push({rem[idx][vidx], {idx, vidx}});
        }
      } else {
        int idx = max1.top().second.first;
        int vidx = max1.top().second.second;
        vidx++;
        sel2[idx][vidx] = true;
        max1.pop();
        while(!max1.empty()) {
          int idx = max1.top().second.first;
          int vidx = max1.top().second.second;
          if(sel1[idx][vidx]) {
            max1.pop();
            continue;
          }
          break;
        }
        if(max1.empty()) {
          cout << "Yes" << endl;
          break;
        }
        // cout << max1.top().first << " " << rem[idx][vidx] << endl;
        if(max1.top().first - rem[idx][vidx] > d) {
          cout << "No" << endl;
          break;
        }
        max1.push({rem[idx][vidx], {idx, vidx}});
        vidx++;
        if(vidx < (int)(rem[idx].size())) {
          max2.push({rem[idx][vidx], {idx, vidx}});
        }
      }
    }
  }
}



Measured memory_bytes: 3132