#include <bits/stdc++.h>
using namespace std;
long long mod = 998244353;
void puts() { cout << endl; }
template <class Head, class... Tail>
void puts(Head&& head, Tail&&... tail) {
  cout << head;
  if (sizeof...(tail) == 0) {
    cout << endl;
  } else {
    cout << " ";
    puts(forward<Tail>(tail)...);
  }
}
void puts(vector<pair<int, int> >& A) {
  for (int i = 0; i < A.size(); i++) {
    cout << "(" << A[i].first << "," << A[i].second << ")";
    if (A.size() - 1 == i) {
      cout << endl;
    } else {
      cout << " ";
    }
  }
}
void puts(vector<vector<pair<int, int> > >& A) {
  for (int i = 0; i < A.size(); i++) {
    puts(A[i]);
  }
}
template <class T>
void puts(vector<T>& A) {
  for (int i = 0; i < A.size(); i++) {
    cout << A[i];
    if (A.size() - 1 == i) {
      cout << endl;
    } else {
      cout << " ";
    }
  }
}
template <class T>
void puts(vector<vector<T> >& A) {
  for (int i = 0; i < A.size(); i++) {
    puts(A[i]);
  }
}
class disjoint_set {
 public:
  vector<int> p, rank;
  disjoint_set(int size) {
    p.resize(size, 0);
    rank.resize(size, 0);
    for (int i = 0; i < size; i++) makeSet(i);
  }
  void makeSet(int x) {
    p[x] = x;
    rank[x] = 0;
  }
  bool same(int x, int y) { return findSet(x) == findSet(y); }
  void unite(int x, int y) { link(findSet(x), findSet(y)); }
  void link(int x, int y) {
    if (rank[x] < rank[y]) {
      p[x] = y;
    } else {
      p[y] = x;
      if (rank[x] == rank[y]) {
        rank[x]++;
      }
    }
  }
  int findSet(int x) {
    if (x != p[x]) {
      p[x] = findSet(p[x]);
    }
    return p[x];
  }
};
int gcd(int a, int b) { return (b == 0) ? a : gcd(b, a % b); }
long long gcd(long long a, long long b) { return (b == 0) ? a : gcd(b, a % b); }
int lcm(int a, int b) { return (a * b) / gcd(a, b); }
long long lcm(long long a, long long b) { return (a * b) / gcd(a, b); }
int extgcd(int a, int b, int& x, int& y) {
  int d = a;
  if (b == 0) {
    x = 1;
    y = 0;
  } else {
    d = extgcd(b, a % b, y, x);
    y -= (a / b) * x;
  }
  return d;
}
vector<int> get_primes(int limit) {
  vector<bool> A(limit + 1, true);
  for (int i = 2; i < A.size(); i++) {
    if (!A[i]) continue;
    for (int j = i * 2; j < A.size(); j += i) A[j] = false;
  }
  vector<int> B;
  for (int i = 2; i < A.size(); i++) {
    if (A[i]) B.push_back(i);
  }
  return B;
}
bool is_prime(int num) {
  if (num < 2) return false;
  for (int i = 2; i <= sqrt(num); i++) {
    if (num % i == 0) {
      return false;
    }
  }
  return true;
}
long long merge_count(vector<int>& A) {
  int n = A.size();
  if (n <= 1) return 0;
  long long count = 0;
  int mid = n / 2;
  vector<int> B(A.begin(), A.begin() + mid);
  vector<int> C(A.begin() + mid, A.end());
  count += merge_count(B);
  count += merge_count(C);
  B.push_back((1000000007));
  C.push_back((1000000007));
  int B_i = 0;
  int C_i = 0;
  for (int i = 0; i < n; i++) {
    if (B[B_i] <= C[C_i]) {
      A[i] = B[B_i++];
    } else {
      count += (n / 2) - B_i;
      A[i] = C[C_i++];
    }
  }
  return count;
}
vector<vector<int> > bit(int size) {
  vector<vector<int> > A;
  for (int i = 0; i < (1 << size); i++) {
    vector<int> temp;
    for (int j = 0; j < size; j++) {
      if ((i & (1 << (size - j - 1))) > 0) {
        temp.push_back(1);
      } else {
        temp.push_back(0);
      }
    }
    A.push_back(temp);
  }
  return A;
}
vector<vector<int> > bit(int size, int min, int max) {
  vector<vector<int> > A;
  for (int i = 0; i < (1 << size); i++) {
    vector<int> temp;
    int count = 0;
    for (int j = 0; j < size; j++) {
      if ((i & (1 << (size - j - 1))) > 0) {
        temp.push_back(1);
        count++;
      } else {
        temp.push_back(0);
      }
    }
    if (min <= count && count <= max) A.push_back(temp);
  }
  return A;
}
int main() {
  int a, b, c;
  cin >> a >> b >> c;
  int sum = a + b;
  if (sum <= c) {
    puts("Yes");
  } else {
    puts("No");
  }
}
