#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <numeric>
#include <set>
#include <cstdlib>
#include <queue>

using namespace std;

typedef long long llint;
typedef long double ld;
#define inf 1e18
#define mod 1000000007
priority_queue<llint,vector<llint>,greater<llint>> que;
priority_queue<llint> q;
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }

string s;

bool judge(llint x){
	if(x%2019==0)return true;
	else return false;
}

void solve(){
	cin >> s;
	llint n=s.size();
	llint ans=0;
	for(int i=0;i<n-3;i++){
		for(int j=4;j<n-i+1;j++){
			string ss;
			ss=s.substr(i,j);
			if(ss.size()>20)break;
			llint x=atoll(ss.c_str());
			x%=mod;
			if(judge(x))ans++;
		}
	}
	cout << ans << endl;
}

int main() {
  solve();
  return 0;
}
