#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
#define FOR(i, n) for(int (i)=0; (i)<(n); (i)++)
#define FOR1(i, n) for(int (i)=1; (i)<=(n); (i)++)
#define FORI(i, n) for(int (i)=n-1; (i)>=0; (i)--)
template<class T, class U> void umin(T& x, const U& y){ x = min(x, (T)y);}
template<class T, class U> void umax(T& x, const U& y){ x = max(x, (T)y);}
template<class T, class U> void init(vector<T> &v, U x, size_t n) { v=vector<T>(n, (T)x); }
template<class T, class U, typename... W> void init(vector<T> &v, U x, size_t n, W... m) { v=vector<T>(n);  for(auto& a : v) init(a, x, m...); }

double x, y, r;
bool dist(double x1, double y1, double x2, double y2){
    ll xx1 = round(x1 * 1e4);
    ll yy1 = round(y1 * 1e4);
    ll xx2 = round(x2 * 1e4);
    ll yy2 = round(y2 * 1e4);
    ll r2 = round(r * 1e4);
    return (xx1-xx2)*(xx1-xx2) + (yy1-yy2)*(yy1-yy2) <= r2*r2;
}

const int inf = 1e9;
int bs(int x2, int dir){
    int y2 = ceil(y);
    if (dir == -1)
        y2 = floor(y);
    if (!dist(x2, y2, x, y)) return inf;

    int a = 0, b = r+1, ret = 0;
    while(a <= b){
        int c = (a+b)/2;
        if (dist(x2, y2+dir*c, x, y)){
            ret = c;
            a = c+1;
        }
        else{
            b = c-1;
        }
    }
    return y2 + dir * ret;
}

int main(int argc, char** argv) {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cout << setprecision(15);
    if (argc == 2 && atoi(argv[1]) == 123456789) freopen("d:\\code\\cpp\\contests\\stdin", "r", stdin);
    cin >> x >> y >> r;
    ll ans = 0;
    for(double dx = -r-10; dx <= r+10; dx++){
        int x2 = floor(x + dx);
        int ymax = bs(x2, 1);
        int ymin = bs(x2, -1);
        if (ymax != inf && ymin != inf)
            ans += ymax - ymin + 1;
        else if (ymax != inf)
            ans += ymax - (int)ceil(y) + 1;
        else if (ymin != inf)
            ans += (int)floor(y) - ymin + 1;
    }
    cout << ans << endl;

    if (argc == 2 && atoi(argv[1]) == 123456789) cout << clock()*1.0/CLOCKS_PER_SEC << " sec\n";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
using s64 = signed long long;
using u64 = unsigned long long;
using f128 = long double;

s64 GetCeilS64(s64 fixed, s64 digit)
{
    if(fixed % digit == 0)
    {
        return fixed;
    }

    if(fixed > 0)
    {
        return ((fixed / digit) + 1) * digit;
    }
    else
    {
        return (fixed / digit) * digit;
    }
}
s64 GetFloorS64(s64 fixed, s64 digit)
{
    if(fixed % digit == 0)
    {
        return fixed;
    }

    if(fixed > 0)
    {
        return (fixed / digit) * digit;
    }
    else
    {
        return ((fixed / digit) - 1) * digit;
    }
}

int main()
{
    f128 x, y, r;
    cin >> x >> y >> r;

    s64 digit = pow(10, 4);
    s64 xInt = llround(x * digit);
    s64 yInt = llround(y * digit);
    s64 rInt = llround(r * digit);

    u64 countInt = 0;
    s64 startX = GetCeilS64(xInt - rInt, digit);
    s64 endX = GetFloorS64(xInt + rInt, digit);

    for(s64 i = startX; i <= endX; i += digit)
    {
        s64 rIntSq = rInt*rInt;
        s64 xIntSq = (i-xInt) * (i-xInt);
        s64 yIntSq = rIntSq - xIntSq;
        s64 p = sqrtl(yIntSq);
        s64 startY = GetCeilS64(yInt - p, digit);
        s64 endY = GetFloorS64(yInt + p, digit);
        if(startY > endY)
        {
            continue;
        }
        u64 subCount = endY/digit - startY/digit + 1;
        countInt += subCount;
    }

    cout << countInt << endl;

    return 0;
}
