/*
	DRZAVNO TAKMICENJE 2007
	ZADATAK: vikendica
	AUTOR: Andreja Ilic, Nis

		Svaki pristup zadatku vodi do problema kako da se izracuna zbir cena u 
	odredjenom pravougaoniku. Zato cemo umesto samih cena placeva u matrici d pamtiti 
	sume odredjenih pravougaonika, tacnije element d [i][j] ce nam predstavljati 
	sumu cena u pravougaoniku sa temenima: (1,1), (i,1), (j,1), (i,j). Ovu sumu
	mozemo racunati preko formule
	
	       d [i][j] = d [i - 1][j] + d [i][j - 1] - d [i - 1][j - 1] + cena [i][j];
				 
		Sada mozemo linearno racunati cenu bilo kog pravougaonika. U kodu, funkcija 
	Sum (x1, y1, x2, y2) nam vraca zbir cune u pravougaoniku cije je gornje levo polje 
	(x1, y1) a donje desno (x2, y2).
			 
  		Vratimo se glavnom problemu. Njemu pristupamo na sledeci nacin: za svako polje
	(i, j) racunamo koliko pravougaonika postoje koji zadovoljavaju trazeni uslov,
	tako da je polje (i, j) bas donje desno polje. Naravno isporbacemo sve moguce sirine 
	pravougaonika ali za njenu duzinu necemo isporabavati sve mogucnosti. Naime, kada trazimo
	broj resenja sa sirinu k mi znamo da je njena duzina sigurno manja od duzine za
	sirinu k - 1 (jer su cene nenegativne, pa je samim tim i suma rastuca) tako da cemo 
	samo te mogucnosti isprobavati.
	
		Dakle, napravimo funkciju koja ce nam vracati broj prvougaonika koji imaju cenu
	manju ili jednaku od date vrednosti. Kao rezultat vratimo razliku tih funkvija za
	vrednosti B i A - 1.
	
  	  Vremenska slozenost algoritma je O (n^2 +  n^3), dok je memorijska slozenost O (n^2).
*/

#include <stdio.h>
#define MaxN 205

int n, m, A, B, d [MaxN][MaxN];
FILE *in, *out;

	int Sum (int x1, int y1, int x2, int y2)
	{
		return (d [x2][y2] - d [x1 - 1][y2] - d [x2][y1 - 1] + d [x1 - 1][y1 - 1]);
	}

	int Count (int Max)
	{
		int sol = 0, i, j, k, l;

		for (i = 1; i <= n; i++)
			for (j = 1; j <= m; j++)
			{
				k = 1;
				for (l = i; l >= 1; l--)
				{
					while ((k <= j) && (Sum (l, k, i, j) > Max))
						k++;
					if (k > j) break;
					sol = sol + (j - k + 1);
				}
			}
		return sol;
	}

	int main ()
	{
		int x, i, j;
		
		in = fopen ("vikendica.in", "r");
		out = fopen ("vikendica.out", "w");
		fscanf (in, "%d %d %d %d", &n, &m, &A, &B);
		
		for (i = 1; i <= n; i++)
			for (j = 1; j <= m; j++)
			{
				fscanf (in, "%d", &x);
				d [i][j] = d [i - 1][j] + d [i][j - 1] - d [i - 1][j - 1] + x;
			}
		fprintf (out, "%d\n", Count (B) - Count (A - 1));
		
		return 0;
	}
