#include <bits/stdc++.h>
using namespace std;
int sif(char c) { return c - '0'; }
char s[200005];
int c[200005];
bool zauz[200005];
int main() {
  int i, n, br = 0;
  scanf("%s", s);
  n = strlen(s);
  for (i = 0; i < n; i++) {
    c[i] = sif(s[i]) % 3;
  }
  for (i = 0; i < n; i++) {
    switch (c[i]) {
      case 0: {
        br++;
        zauz[i] = true;
        break;
      }
      case 1: {
        if (!zauz[i] && !zauz[i - 1] && c[i - 1] == 2) {
          zauz[i - 1] = zauz[i] = true;
          br++;
        }
        if (!zauz[i] && i >= 2 && !zauz[i - 1] && !zauz[i - 2] &&
            c[i - 1] + c[i - 2] == 2) {
          zauz[i] = true;
          zauz[i - 1] = zauz[i - 2] = true;
          br++;
        }
        if (!zauz[i] && i >= 3 && !zauz[i - 1] && !zauz[i - 2] &&
            !zauz[i - 3] && c[i - 1] + c[i - 2] + c[i - 2] == 5) {
          zauz[i] = zauz[i - 3] = true;
          zauz[i - 1] = zauz[i - 2] = true;
          br++;
        }
        break;
      }
      case 2: {
        if (!zauz[i] && !zauz[i - 1] && c[i - 1] == 1) {
          zauz[i - 1] = zauz[i] = true;
          br++;
        }
        if (!zauz[i] && i >= 2 && !zauz[i - 1] && !zauz[i - 2] &&
            c[i - 1] + c[i - 2] == 4) {
          zauz[i] = true;
          zauz[i - 1] = zauz[i - 2] = true;
          br++;
        }
        break;
      }
    }
  }
  printf("%d\n", br);
  return 0;
}
