#include<cstdio>
#define set(x) freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);
using namespace std;
int n,m,Q;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
return x*f;
}
namespace cas1{
static const int N=201,Z=1000;
int sum[N][N][Z],num[N][N][Z];
void work(){
for(int i=1,x;i<=n;i++){
for(int j=1;j<=m;j++){
x=read();
for(int k=1;k<=1000;k++){
sum[i][j][k]=sum[i-1][j][k]+sum[i][j-1][k]-sum[i-1][j-1][k];
num[i][j][k]=num[i-1][j][k]+num[i][j-1][k]-num[i-1][j-1][k];
if(x>=k) sum[i][j][k]+=x,num[i][j][k]++;
}
}
}
for(int x1,x2,y1,y2,h,l,r,mid,ans,cnt1,cnt2;Q--;){
x1=read();y1=read();x2=read();y2=read();h=read();
l=1,r=1000,ans=r+1;
while(l<=r){
mid=l+r>>1;
if(sum[x2][y2][mid]-sum[x1-1][y2][mid]-sum[x2][y1-1][mid]+sum[x1-1][y1-1][mid]>=h){
l=mid+1;ans=mid;
}
else{
r=mid-1;
}
}
if(ans>1000) puts("Poor QLW");
else{
cnt1=sum[x2][y2][ans]-sum[x1-1][y2][ans]-sum[x2][y1-1][ans]+sum[x1-1][y1-1][ans]-h;
cnt2=num[x2][y2][ans]-num[x1-1][y2][ans]-num[x2][y1-1][ans]+num[x1-1][y1-1][ans];
printf("%d\n",cnt2-cnt1/ans);
}
}
}
}
namespace cas2{
static const int N=5e5+5,M=N*20;
int sz,tot[N],sum[M],siz[M],ls[M],rs[M],root[N];
void insert(int &k,int last,int l,int r,int x){
k=++sz;
siz[k]=siz[last]+1;
sum[k]=sum[last]+x;
if(l==r) return ;
ls[k]=ls[last];
rs[k]=rs[last];
int mid=l+r>>1;
if(x<=mid) insert(ls[k],ls[last],l,mid,x);
else insert(rs[k],rs[last],mid+1,r,x);
}
int query(int k,int last,int l,int r,int kth){
if(l==r) return (sum[k]-sum[last])/(siz[k]-siz[last])*kth;
int mid=l+r>>1,cnt=siz[ls[k]]-siz[ls[last]];
if(kth<=cnt) return query(ls[k],ls[last],l,mid,kth);
return sum[ls[k]]-sum[ls[last]]+query(rs[k],rs[last],mid+1,r,kth-cnt);
}
void work(){
for(int i=1,x;i<=m;i++){
x=read();
insert(root[i],root[i-1],1,1000,x);
tot[i]=tot[i-1]+x;
}
for(int x1,x2,y1,y2,h,l,r,mid,up,ans,K;Q--;){
x1=read();y1=read();x2=read();y2=read();h=read();
if(tot[y2]-tot[y1-1]<h){puts("Poor QLW");continue;}
l=1,r=up=y2-y1+1,ans=r;
while(l<=r){
mid=l+r>>1;K=up-mid+1;
if(tot[y2]-tot[y1-1]-query(root[y2],root[y1-1],1,1000,K)>=h){
r=mid-1;ans=mid-1;
}
else{
l=mid+1;
}
}
printf("%d\n",ans);
}
}
}
int main(){
set(susu);
n=read();m=read();Q=read();
if(n<=200&&m<=200)
cas1::work();
else
cas2::work();
return 0;
}