#include <iostream>#include <cstdio>#include <vector>#include <algorithm>#include <queue>#include <cmath>#include <string>#include <string.h>#include <iterator>#include <cstdlib>#include<stack>#include<map>#include<set>#define inff 0x1f#define EPS 1e-7#define maxm 200000000#define MAXN 33#define inf 1000000000#define L(x) (x<<1)#define R(x) (x<<1|1)#define N 1002#define mod 2008#define pi 3.1415926535using namespace std;long long sum[102][2002];int bm[102][2002],gm[102][2002];int v[102][2002];struct node{ int l,h;}p[102][2002];int main(){ int n,m,b,g; while(scanf("%d%d%d%d",&n,&m,&b,&g)!=EOF) { int i,j;memset(sum,0,sizeof(sum));memset(bm,0,sizeof(bm));memset(gm,0,sizeof(gm));for (i=0;i<n;i++){ for (j=0;j<m;j++) { int x,y; scanf("%d%d",&x,&y); sum[i][j]=x; v[i][j]=x; if(y==1) bm[i][j]=1; else gm[i][j]=1; }}for (i=0;i<n;i++){ for (j=0;j<m;j++) { if(i>0) { sum[i][j]+=sum[i-1][j]; bm[i][j]+=bm[i-1][j]; gm[i][j]+=gm[i-1][j]; } if(j>0) { sum[i][j]+=sum[i][j-1]; bm[i][j]+=bm[i][j-1]; gm[i][j]+=gm[i][j-1]; } if(i>0&&j>0) { sum[i][j]-=sum[i-1][j-1]; bm[i][j]-=bm[i-1][j-1]; gm[i][j]-=gm[i-1][j-1]; } }} for (i=0;i<n;i++) {for (j=0;j<m;j++){ int k; p[i][j].l=i;p[i][j].h=i; for (k=i-1;k>=0;k--) { if(v[k][j]<0) break; p[i][j].l=k; } for (k=i+1;k<n;k++) { if(v[k][j]<0) break; p[i][j].h=k; }} }long long ans=-1;for (i=0;i<n;i++){int l,h;l=-1;h=10000; int last=-1;for (j=0;j<=m;j++){ if(j-1!=last) { long long s=0; int sb=0,sg=0; if(l-1>=0) { s+=sum[l-1][j-1]; sb+=bm[l-1][j-1]; sg+=gm[l-1][j-1]; } if(last>=0){ s+=sum[h][last]; sb+=bm[h][last]; sg+=gm[h][last]; } if(l>0&&last>=0) { s-=sum[l-1][last]; sb-=bm[l-1][last]; sg-=gm[l-1][last]; } if(bm[h][j-1]-sb>=b&&gm[h][j-1]-sg>=g&∑[h][j-1]-s>ans) ans=sum[h][j-1]-s; } if(j<m&&v[i][j]>=0) { if(p[i][j].l>l) l=p[i][j].l; if(p[i][j].h<h) h=p[i][j].h; } else { last=j; l=-1;h=10000; }}} if(ans<0) printf("No solution!n");elseprintf("%lldn",ans); } return 0;}