#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n)   REP(i,0,n)

bool solve(int n,int d,queue<int> *in,int *sum){
  while(true){
    int mini=10000*10000,maxi=0;
    bool a=false;
    rep(i,n){
      maxi=max(maxi,sum[i]);
    }
    if (maxi==0)break;
    rep(i,n){
      while(!in[i].empty() && maxi-(sum[i]-in[i].front()) <= d)
	sum[i]-=in[i].front(),in[i].pop(),a=true;
    }
    rep(i,n){
      if (sum[i] == maxi)sum[i]-=in[i].front(),in[i].pop(),a=true;
    }
    //    rep(i,n)cout << sum[i]<<" ";cout << endl;
    if (!a)return false;
    maxi=0;
    rep(i,n)maxi=max(maxi,sum[i]),mini=min(mini,sum[i]);
    if (maxi-mini > d)return false;
  }
  return true;
}

int main(){
  int n,d;
  while(cin>>n>>d && n){
    int sum[n];queue<int> in[n];
    rep(i,n){
      sum[i]=0;int m,t;cin>>m;
      vector<int> a(m);rep(j,m)cin>>a[j];
      reverse(a.begin(),a.end());
      rep(j,m)sum[i]+=a[j],in[i].push(a[j]);
    }
    cout << (solve(n,d,in,sum)?"Yes":"No") << endl;
  }
}