#include <bits/stdc++.h>
using namespace std;
template <class T>
using vv = vector<vector<T> >;
template <typename T>
ostream& operator<<(ostream& s, const vector<T>& v) {
  int len = v.size();
  s << "\n";
  for (int(i) = (0); (i) < (len); ++(i)) {
    s << v[i];
    if (i < len - 1) {
      s << "\t";
    }
  }
  s << "\n";
  return s;
}
template <typename T>
ostream& operator<<(ostream& s, const vector<vector<T> >& vv) {
  int len = vv.size();
  for (int(i) = (0); (i) < (len); ++(i)) {
    s << vv[i];
  }
  return s;
}
template <typename T>
ostream& operator<<(ostream& s, const deque<T>& v) {
  int len = v.size();
  s << "\n";
  for (int(i) = (0); (i) < (len); ++(i)) {
    s << v[i];
    if (i < len - 1) {
      s << "\t";
    }
  }
  s << "\n";
  return s;
}
template <typename T>
ostream& operator<<(ostream& s, const deque<deque<T> >& vv) {
  int len = vv.size();
  for (int(i) = (0); (i) < (len); ++(i)) {
    s << vv[i];
  }
  return s;
}
template <typename T>
ostream& operator<<(ostream& s, const set<T>& v) {
  s << "\n";
  for (auto elm : v) {
    s << elm << "\t";
  }
  s << "\n";
  return s;
}
inline void scan(int& a) { scanf("%d", &a); }
inline void scan(int& a, int& b) { scanf("%d%d", &a, &b); }
inline void scan(int& a, int& b, int& c) { scanf("%d%d%d", &a, &b, &c); }
inline void scan(int& a, int& b, int& c, int& d) {
  scanf("%d%d%d%d", &a, &b, &c, &d);
}
inline void scan(vector<int>& v) {
  int sz = v.size();
  for (int(i) = (0); (i) < (sz); ++(i)) {
    scan(v[i]);
  }
}
inline void scan(vector<vector<int> >& v) {
  int sz = v.size();
  for (int(i) = (0); (i) < (sz); ++(i)) {
    scan(v[i]);
  }
}
inline void scan(long long& a) { scanf("%lld", &a); }
inline void scan(long long& a, long long& b) { scanf("%lld%lld", &a, &b); }
inline void scan(long long& a, long long& b, long long& c) {
  scanf("%lld%lld%lld", &a, &b, &c);
}
inline void scan(long long& a, long long& b, long long& c, long long& d) {
  scanf("%lld%lld%lld%lld", &a, &b, &c, &d);
}
inline void scan(vector<long long>& v) {
  int sz = v.size();
  for (int(i) = (0); (i) < (sz); ++(i)) {
    scan(v[i]);
  }
}
inline void scan(vector<vector<long long> >& v) {
  int sz = v.size();
  for (int(i) = (0); (i) < (sz); ++(i)) {
    scan(v[i]);
  }
}
inline void scan(char& a) { scanf(" %c", &a); }
inline void scan(vector<char>& v) {
  int sz = v.size();
  for (int(i) = (0); (i) < (sz); ++(i)) {
    scan(v[i]);
  }
}
inline void scan(vector<vector<char> >& v) {
  int sz = v.size();
  for (int(i) = (0); (i) < (sz); ++(i)) {
    scan(v[i]);
  }
}
inline void scan(string& s) {
  char BUF[3000000];
  scanf(" %s", BUF);
  s = string(BUF);
}
inline void print(int a) { printf("%d\n", a); }
inline void print(int a, int b) { printf("%d %d\n", a, b); }
inline void print(long long a) { printf("%lld\n", a); }
inline void print(long long a, long long b) { printf("%lld %lld\n", a, b); }
inline void print(string s) { cout << s << "\n"; }
inline void print_yn(bool flg) {
  if (flg) {
    printf("Yes\n");
  } else {
    printf("No\n");
  }
}
int main() {
  string s;
  scan(s);
  int n = s.length();
  vector<int> cnt(3, 0);
  for (int(i) = (0); (i) < (n); ++(i)) {
    cnt[s[i] - 'a'] += 1;
  }
  int mi = 1e6;
  int ma = 0;
  for (int(i) = (0); (i) < (3); ++(i)) {
    mi = min(mi, cnt[i]);
    ma = max(ma, cnt[i]);
  }
  print_yn(ma - mi <= 1);
  return 0;
}
