#include<bits/stdc++.h>
using namespace std;
int order[300007];
long long t[300007],ans[300007];
int main(){
int n;
long long m;
scanf("%d%lld",&n,&m);
for(int i=1;i<=n;i++)
scanf("%lld",&t[i]);
t[n+1]=2e18;
for(int i=1;i<=n;i++)
scanf("%d",&order[i]);
for(int i=1;i<=n;i++)
if(order[i]<i)
return puts("No"),0;
for(int i=1;i<n;i++)
if(order[i]>order[i+1])
return puts("No"),0;
for(int i=n;i>0;i--)
ans[order[i]]=t[order[i]+1]+m-1;//从后往前是为了尽可能放大空间
for(int i=n;i>0;i--)
if(!ans[i])
ans[i]=ans[i+1]-1;//贪心
for(int i=1;i<n;i++)
if((order[i]>i)&&(ans[i]-t[i+1]<m))//出现相同order的话,要能够让后面的前进一个,所以如果不给后面留空间那就不符合题意
return puts("No"),0;
puts("Yes");
for(int i=1;i<=n;i++)
printf("%lld ",ans[i]);
return 0;
}