#include <bits/stdc++.h>
using namespace std;
string x;
long long int dp[200005][3][2];
long long int f(int i,int m,int ff)
{
if(i==(x.size()-1))
{
if(ff==0)
{
if( (x[i]-48)%3==0 )
return 1LL;
else
return 0LL;
}
else
{
m= ( (m*10) + (int)(x[i]-48))%3;
if(m==0)
return 1LL;
else
return 0LL;
}
}
if(dp[i][m][ff] != -1)
return dp[i][m][ff];
long long int ans=0;
m= ( (m*10) + (int)(x[i]-48))%3;
if(m==0)
{
ans = max( (1LL+f(i+1,0,0)) ,f(i+1,m,1));
}
else
{
ans = max( f(i+1,0,0), f(i+1,m,1) );
}
return dp[i][m][ff]=ans;
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>x;
memset(dp,-1,sizeof(dp));
cout<<f(0,0,0)<<endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cmluZyB4Owpsb25nIGxvbmcgaW50IGRwWzIwMDAwNV1bM11bMl07CmxvbmcgbG9uZyBpbnQgZihpbnQgaSxpbnQgbSxpbnQgZmYpCnsKICAgIGlmKGk9PSh4LnNpemUoKS0xKSkKICAgIHsKICAgICAgICBpZihmZj09MCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKCAoeFtpXS00OCklMz09MCApCiAgICAgICAgICAgIHJldHVybiAxTEw7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIDBMTDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgbT0gICggKG0qMTApICsgKGludCkoeFtpXS00OCkpJTM7CiAgICAgICAgICAgIGlmKG09PTApCiAgICAgICAgICAgIHJldHVybiAxTEw7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIDBMTDsKICAgICAgICB9CiAgICB9CgogICAgaWYoZHBbaV1bbV1bZmZdICE9IC0xKQogICAgcmV0dXJuIGRwW2ldW21dW2ZmXTsKCiAgICBsb25nIGxvbmcgaW50IGFucz0wOwoKCiAgICAgICAgbT0gICggKG0qMTApICsgKGludCkoeFtpXS00OCkpJTM7CiAgICAgICAgaWYobT09MCkKICAgICAgICB7CiAgICAgICAgICAgIGFucyA9IG1heCggKDFMTCtmKGkrMSwwLDApKSAsZihpKzEsbSwxKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGFucyA9IG1heCggZihpKzEsMCwwKSwgIGYoaSsxLG0sMSkgKTsKICAgICAgICB9CgogICAgcmV0dXJuIGRwW2ldW21dW2ZmXT1hbnM7Cn0KaW50IG1haW4oKQp7CiAgICBzdGQ6Omlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBjb3V0LnRpZShOVUxMKTsKICAgIGNpbj4+eDsKICAgIG1lbXNldChkcCwtMSxzaXplb2YoZHApKTsKICAgIGNvdXQ8PGYoMCwwLDApPDxlbmRsOwoJcmV0dXJuIDA7Cn0=