#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, n)  for (int i = 0; i <  (int)(n); i++)
#define rep1(i, n) for (int i = 1; i <= (int)(n); i++)
const int MOD = 1000000007;

bool hantei(string s,int m){
  int wk_S=0;
  int wk_N=0;
  rep(i,s.length()){
    wk_N = s.at(i) - '0';
    wk_S = (wk_S*10 + wk_N)%m;
  }
  if(wk_S==0){ return true;}
  else{return false;}
}

int main() {
  ll Ans = 0;  // 回答：
  string S; cin >> S; // 判定文字列：最大長200000
  int L=S.length();   // 文字列長
  map<int,int>  M;  // i桁目までの数値が割り切れたか回数

  rep(i,L){ // 切取り開始位置
    rep1(j,L){  // 切り取る長さ
      if(i+j>L){break;}
      if(hantei(S.substr(i,j),2019)){
        Ans++;
        if(i>1){ Ans+=M[i-1]; }
        M[i+j-1]++;
        break;
      }
    }
  }

  cout << Ans << endl;
}
