#include <bits/stdc++.h>
using namespace std;
const double ME = 2.71828;
const int N = 3e5 + 20;
const int inf = (int)10e18;
const double pi = 3.141592653;
void LOSER() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
void file() { freopen("records.in", "r", stdin); }
long long gcd(long long a, long long b) { return (!b) ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long Fib_recur(long long n) {
  vector<long long> v(n + 5, 0);
  v[1] = 0;
  v[2] = 1;
  for (int i = int(3); i <= int(n); i++) v[i] = v[i - 1] + v[i - 2];
  return v[n];
}
bool isprime(int n) {
  if (n == 1)
    return false;
  else if ((!(n & 1)) && n != 2)
    return false;
  else {
    for (int i = 2; i <= sqrt(n); i++) {
      if (n % i == 0) return false;
    }
    return true;
  }
}
void Solve() {
  long long n, m;
  cin >> n >> m;
  long long res = n + m;
  string t = "", s, nst, mst, nn = "", mm = "";
  s = to_string(res);
  for (int i = 0; i < ((int)(s).size()); i++)
    if (s[i] != '0') t += s[i];
  nst = to_string(n);
  mst = to_string(m);
  for (int i = 0; i < ((int)(nst).size()); i++)
    if (nst[i] != '0') nn += nst[i];
  for (int i = 0; i < ((int)(mst).size()); i++)
    if (mst[i] != '0') mm += mst[i];
  m = 0, n = 0;
  for (int i = 0; i < ((int)(mm).size()); i++) {
    m *= 10;
    m += mm[i] - '0';
  }
  for (int i = 0; i < ((int)(nn).size()); i++) {
    n *= 10;
    n += nn[i] - '0';
  }
  mm = to_string(n + m);
  if (t == mm)
    cout << "YES\n";
  else
    cout << "NO\n";
}
int main() {
  LOSER();
  Solve();
}
