#include<iostream>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> a1,b1,ans;
string a,b,A;
bool flag=true;
vector<int> jf(vector<int> x,vector<int> y)
{
int t=0,T=y.size()-1;
vector<int> ans;
for(int i=x.size()-1; i>=0; i--)
{
int s=x[i]+t;
if(T>=0)s-=y[T];
if(s<0)t=-1,s+=10;
else t=0;
ans.push_back(s);
T--;
}
while(ans.size()>1&&ans.back()==0)ans.pop_back();
reverse(ans.begin(),ans.end());
return ans;
}
vector<int> c(vector<int> x,int y)
{
vector<int> ans;
int t=0;
for(int i=x.size()-1; i>=0||t; i--)
{
if(i>=0)
t+=x[i]*y;
ans.push_back(t%10),t/=10;
}
while(ans.size()>1&&ans.back()==0)ans.pop_back();
reverse(ans.begin(),ans.end());
return ans;
}
bool vec(vector<int> x,vector<int> y)
{
if(x.size()!=y.size())return x.size()>y.size();
for(int i=0; i<x.size(); i++)
if(x[i]!=y[i])
return x[i]>y[i];
return true;
}
void gchu(string A,vector<int> a1,vector<int> b1)
{
vector<int> t,res;
for(int i=0; i<a1.size(); i++)
{
t.push_back(a1[i]);
reverse(t.begin(),t.end());
while(t.size()!=0&&t.back()==0)t.pop_back();
reverse(t.begin(),t.end());
if(vec(t,b1))
{
for(int j=9; j>0; j--)
if(vec(t,c(b1,j)))
{
t=jf(t,c(b1,j)),res.push_back(j);
break;
}
}
else res.push_back(0);
}
reverse(res.begin(),res.end());
while(res.size()>1&&res.back()==0)res.pop_back();
int g=-1;
for(int i=res.size()-1; i>=0; i--)
if(char(res[i]+48)!=A[++g])
flag=false;
}
int main()
{
cin>>A>>a>>b;
for(int i=0; i<a.size(); i++)a1.push_back(a[i]-'0');
for(int i=0; i<b.size(); i++)b1.push_back(b[i]-'0');
gchu(A,a1,b1);
if(flag)
cout<<"YES";
else cout<<"NO";
return 0;
}